服务端: 1import java.io.BufferedReader; 2import java.io.DataInputStream; 3import java.io.DataOutputStream...; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.net.ServerSocket...; 7import java.net.Socket; 8 9public class Server { 10 11 public static final int PORT...; 2import java.io.DataInputStream; 3import java.io.DataOutputStream; 4import java.io.IOException...; 5import java.io.InputStreamReader; 6import java.net.Socket; 7 8public class Client {
例子简单例子,实现双向通信proto 文件使用stream 关键字message CommandMessage { required int32 type = 1; optional string
新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端 两个工程的读写操作线程类基本上完全相同 服务端: import java.io.BufferedReader; import java.io.DataInputStream...; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader...; import java.net.ServerSocket; import java.net.Socket; public class Server { public...; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException;...import java.io.InputStreamReader; import java.net.Socket; public class Client { public
Java中实际上提供了java.util.Stack来实现栈结构,但官方目前已不推荐使用,而是使用java.util.Deque双端队列来实现队列与栈的各种需求.如下图所示java.util.Deque...的实现子类有java.util.LinkedList和java.util.ArrayDeque.顾名思义前者是基于链表,后者基于数据实现的双端队列....下表列出了Deque与Queue相对应的接口: 下表列出了Deque与Stack对应的接口: 上面两个表共定义了Deque的12个接口。...添加,删除,取值都有两套接口,它们功能相同,区别是对失败情况的处理不同。一套接口遇到失败就会抛出异常,另一套遇到失败会返回特殊值(false或null)。...虽然Deque的接口有12个之多,但无非就是对容器的两端进行操作,或添加,或删除,或查看。明白了这一点讲解起来就会非常简单。
Java——数据结构之双向链表 接上篇Java——数据结构之单链表 在之前的学习中,我们主要了解了很多 Java 的 基本语法,但是 在之后的 Java学习中,了解 基础 数据结构的知识 非常重要...,数据结构的思想 可以帮助我们更加清晰 明白的了解 Java 的解题思路等等。 ...今天我们就来开始学习 实现一个 Java 基础的 不带头双向非循环链表。...作为双向链表,可以从头节点遍历到尾节点,同时也可以从尾节点遍历到头节点,所以我们要定义两个节点—— head头节点,last尾节点 public ListNode head; public
专栏介绍 【Java】 目前主要更新Java,一起学习一起进步。 本期介绍 本期主要介绍接口 文章目录 1. 概述 2. 定义格式 3. 基本的实现 4. 接口的多实现 5. ...概述 接口,是 Java 语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和 成员方法,那么 接口的内部主要就是 封装了方法 ,包含抽象方法( JDK 7 及以前...基本的实现 实现的概述 类与接口的关系为实现关系,即 类实现接口 ,该类可以称为接口的实现类,也可以称为接口的子 类。...代码如下: 定义接口: 定义父类: 定义子类: 定义测试类: 5. 接口的多继承【了解】 一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。...接口的继承使用 extends 关键 字,子接口继 承父接口的方法。 如果父接口中的默认方法有重名的,那么子接口需要重写一次。
Java 接口(重要) 基本定义: 如果一个类中只有抽象方法和全局常量所组成;在这类情况下不会将其定义为抽象类,而只会将其定义为“接口”;严格来讲:接口就属于一个特殊的类,而且这个类里面只有抽象方法和全局常量...; 一个抽象类只能够继承也给抽象的父类,而接口没有这个限制 一个子类只能够继承一个抽象类,却可以实现继承多个接口 【Java接口主要功能就是解决了继承的单继承局限问题】 虽然接口的定义是只包含定义抽象方法和全局常量...) 在Java中,也存在程序标准,而标准就是由接口定义的;通俗的理解为:接口类即是一个标准,子类则依靠接口类而产出的依赖(接口) //标准可以连接不同层的操作类 interface USB...{ public static void main(String [] args) { Fruit f = new Orange() ; f.eat() ; } } 在Java...n 在进行公共操作的时候,一定要定义出接口 n 有了接口就需要利用子类完善方法 n 自己写的接口,不要关键字new直接实例化接口子类(用工厂类完成)
接口中常量的修饰关键字:public,static,final(常量) 函数的修饰关键字:public,abstract 如果没有写全,系统在编译时会自动加上 接口中的所有成员都是public 接口中的方法...,都是抽象方法, * 接口是不可以创建对象,因为有抽象方法; 子类如果只实现部分接口的抽象方法,则子类是抽象类,依然不可以创建对象, 子类只有将接口中的抽象方法全部实现,才可以创建对象 注:实现接口的方法...,必须是public修饰的,因为抽象类中的成员(常量和方法)都是public修饰的 * 一个类只能继承一个父类,可以实现多个接口 * 实现接口和继承类的选用方法:继承表示,子类是父类的一部分,比如说人和学生的关系...; 实现接口表示,接口是类的一部分功能的实现,例如人和开车的关系,接口一般都是实现类的扩展功能 * 1 //定义student接口 2 interface student{ 3 public..."); 11 } 12 } 13 //将接口中的所有方法都实现了,可以创建对象 14 class badStudent implements student{ 15 public void
接口 概念 接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。...类名 implements 接口名 { } 特点 1、接口中的成员变量只能是静态常量,定义时必须初始化。...默认修饰符:public static final 2、接口中没有构造方法,因为接口不能实例化对象 3、接口中的成员方法只能是抽象方法,没有方法体。...默认修饰符:public abstract 4、接口的实现类必须重写接口中方法,或者是一个抽象类(可以重写也可以不重写接口中的方法) 接口的声明和实现 interface play{ // 常量...1、接口是对类的扩展,通过接口可以让类拥有更多更强的功能 2、接口中只有全局常量和抽象方法,所以不能实例化 3、接口的实现类必须重写所有方法,或者是个抽象类 4、接口可以多实现 5、接口可以单继承,也可以多继承
接口: 接口是一种引用数据类型; 接口的格式: public interface 接口名称{ //接口内容 } 即:将class改成关键字interface,它编译生成的字节码文件依然是.java...-->.class; 如果java7,接口中可以包含的内容有: 1、常量 2、抽象方法 如果java8,还可以包含的内容有: 3、默认方法 4、静态方法 如果java9,还可以额外包含内容:...5、私有方法 注意:类是可以new的,接口是不可以new的; 接口的使用步骤: 1、接口不能直接使用,必须有一个"实现类"来"实现"该接口; 格式: public class 实现类名称 implements...接口名称{ } 2、接口中的实现类必须覆盖重写(实现)接口中所有的抽象方法; 实现:去掉abstract关键字,加上方法体 public 返回值类型 方法名(参数列表){ 方法体; } 3、在main...接口中的抽象方法: 在任何的java版本中,接口都能定义抽象方法; 定义方法: //接口中的抽象方法定义方式; public abstract void abs1(); 注意事项: 1、接口中的抽象方法
Java接口概念Java编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。...Java接口主要有以下特点1、接口中的所有方法都是抽象的,不能有具体实现。2、接口定义的常量默认是 public static final 的。...6、接口与抽象类有些相似,但也有很大区别,比如接口不能包含构造器、变量和实例方法等。Java接口的具体作用1、接口定义了一个规范,类实现这个规范即可满足某些特定的需求。...定义接口Java接口使用 interface 关键字来定义,语法如下:public interface 接口名 { // 一些常量定义 // 一些抽象方法签名}其中,public 表示该接口对外可见...在Java中,使用 implements 关键字来实现接口。
所以,我们要用到接口 ?...1.接口实现用implements关键字,继承用extends 2.implements接口必须重写方法 3.接口只需要写方法体 二.多重继承 举例:步兵射击,医疗兵既可以射击又可以治疗 public...public void shot() { // TODO Auto-generated method stub System.out.println("医疗兵射击"); } } 总结:接口可以继承父接口...,而类可以实现多个接口 三.接口和抽象类的区别 1.子类只能继承一个抽象类,但可以实现任意多的接口 public class Medic extends HH implements Trentment,...Attack{ //继承一个抽象类,可以有多个接口 } 2.接口中的方法都是抽象方法,而抽象类中可以有非抽象方法 接口中关键字默认abstract public abstract class HH
final关键字进行修饰,说明不可改变 调用: //在main中 int sum=iner.a; //iner是接口类,a是接口类中的常量 //直接把接口中的常量赋值给了sum 注意事项: 1、接口中的常量...从java8开始,接口中允许定义默认方法; 格式: public default 返回值类型 方法名称(参数列表){ 方法体; } 注意: 1、接口的默认方法,可以通过接口的实现类对象,直接调用...接口中的默认方法,可以解决接口升级的问题。...接口中的静态方法: 从java8开始,接口中允许定义静态方法; 格式: public static 返回值类型 方法名称(参数列表){ 方法体; } 调用:直接用接口类 .方法名(不能用实现类对象来进行调用...Java9开始,接口中允许定义私有方法; 格式: private void med(){ } 1、静态私有方法,解决静态方法之间重复代码问题; private static 返回值类型 方法名
Lambda表达式简介》 《java8 lambda表达式,方法的引用以及构造器的引用》 2.函数式接口 《java8 函数式接口简介》 《JAVA8 Function接口以及同类型的特化的接口》 《...JAVA8 Consumer接口》 《JAVA8 Supplier接口》 《JAVA8 UnaryOperator接口》 《JAVA8 BiConsumer 接口》 3.stream接口操作 《java8...Stream接口简介》 《 java8 Stream-创建流的几种方式》 《JAVA8 stream接口 中间操作和终端操作》 《JAVA8 Stream接口,map操作,filter操作,flatMap...操作》 《JAVA8 stream接口 distinct,sorted,peek,limit,skip》 《java8 stream接口 终端操作 forEachOrdered和forEach》 《java8...,anyMatch,allMatch,noneMatch》 《java8 srteam接口终端操作reduce操作》 《java8 stream接口 终端操作 collect操作》 4.其他部分 《java8
(1) 直接配置在项目上面 (2) 配置在项目启动所依赖的tomcat上 (3) 配置在nginx上( 单向认证, 双向认证, 多域名认证) … … 而这里则主要介绍了两种配置方式, 第一种是在项目中直接配置...SpringBoots项目配置https访问接口(直接配置) SSL证书, 是基于SSL协议及相关加密算法生成的证书, 那么这个ssl协议又是什么呢?...通过Nginx配置证书(双向认证) 双向认证流程 端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。...浏览器访问 浏览器一般用单向认证会比较多,双向认证的详细配置步骤这里就不多说了。...双向认证配置指南 6. Nginx配置Https单向认证、双向认证以及多证书配置 7. 双向认证开发实践
单向链表查找的方向只能是一个方向 单向链表不能自我删除,需要靠辅助节点 而双向链表则能够很轻松地实现上面的功能。...何为双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。...增删改查思路分析 对于单链表,我们已经有所了解,并且掌握了增删改查,而双向链表与单链表唯一不同之处就在于多了一个指向前一个节点的指针。...虽然只有这点不同,但是双向链表在增删改查的实现上还是与单链表有很多不一样之处。...temp(因为是双向链表,因此可以实现自我删除某个节点) 使temp.pre.next = temp.next(解释一下:temp.pre指向的是前一个节点,然后将temp.pre.next也就是temp
[java] view plaincopy import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException...; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL;...import java.security.GeneralSecurityException; import java.security.KeyStore; import javax.net.ssl.HostnameVerifier...throws Exception { // 声明SSL上下文 SSLContext sslContext = null; // 实例化主机名验证接口
《java版gRPC实战》全系列链接 用proto生成代码 服务发布和调用 服务端流 客户端流 双向流 客户端动态获取服务端地址 基于eureka的注册发现 本篇概览 本文是《java版gRPC实战》系列的第五篇...,目标是掌握双向流类型的服务,即请求参数是流的形式,响应的内容也是流的形式; 先来看看官方资料对双向流式RPC的介绍:是双方使用读写流去发送一个消息序列。...,即客户端提交多个商品和数量,服务端返回每个商品减扣库存成功和失败的情况; 咱们尽快进入编码环节吧,具体内容如下: 在proto文件中定义双向流类型的gRPC接口,再通过proto生成java代码 开发服务端应用...gRPC接口 首先要做的就是定义gRPC接口,打开mall.proto,在里面新增方法和相关的数据结构,需要重点关注的是BatchDeduct方法的入参ProductOrder和返回值DeductReply...都添加了stream修饰(ProductOrder是上一章定义的),代表该方法是双向流类型: // gRPC服务,这是个在线商城的库存服务 service StockService { // 双向流式
本篇概览 本文是《java版gRPC实战》系列的第五篇,目标是掌握双向流类型的服务,即请求参数是流的形式,响应的内容也是流的形式; 先来看看官方资料对双向流式RPC的介绍:是双方使用读写流去发送一个消息序列...,即客户端提交多个商品和数量,服务端返回每个商品减扣库存成功和失败的情况; 咱们尽快进入编码环节吧,具体内容如下: 在proto文件中定义双向流类型的gRPC接口,再通过proto生成java代码 开发服务端应用...gRPC接口 首先要做的就是定义gRPC接口,打开mall.proto,在里面新增方法和相关的数据结构,需要重点关注的是BatchDeduct方法的入参ProductOrder和返回值DeductReply...都添加了stream修饰(ProductOrder是上一章定义的),代表该方法是双向流类型: // gRPC服务,这是个在线商城的库存服务 service StockService { // 双向流式...gRPC接口,代码中已经添加详细注释: package grpctutorials; import com.bolingcavalry.grpctutorials.lib.DeductReply; import
Java 中 一个类要实现clone功能 必须实现 Cloneable接口,否则在调用 clone() 时会报 CloneNotSupportedException 异常。...Java中所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone(),这个方法将返回Object对象的一个拷贝。...,这个接口属于java.lang 包,java.lang包已经被缺省的导入类中,所以不需要写成java.lang.Cloneable; 二是重载了clone()方 法; 三是在clone()方法中调用了...参考 Serializable接口 Serializable接口中一个成员函数或者成员变量也没有,这个接口的作用就是实现序列化,那什么是序列化?...第二种情况中:如果父类不实现 Serializable接口的话,就需要有默认的无参的构造函数。这是因为创建java 对象的时候需要先有父对象,才有子对象,反序列化也不例外。
领取专属 10元无门槛券
手把手带您无忧上云