DirectBuffer
之前我们用ByteBuffer.allocate()看一下源码:
1 | public static ByteBuffer allocate(int capacity) { |
HeapByteBuffer
是从堆上分配的内存空间创建的Buffer,实际上JDK还提供了另外一种方式ByteBuffer.allocateDirect():
1 | public static ByteBuffer allocateDirect(int capacity) { |
之前我们用ByteBuffer.allocate()看一下源码:
1 | public static ByteBuffer allocate(int capacity) { |
HeapByteBuffer
是从堆上分配的内存空间创建的Buffer,实际上JDK还提供了另外一种方式ByteBuffer.allocateDirect():
1 | public static ByteBuffer allocateDirect(int capacity) { |
java NIO中的Buffer用于和NIO通道进行交互。数据从通道读入到缓冲区,从缓冲区写入到通道中。
缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。
之前代码里面用到了ByteBuffer
,实际上ByteBuffer
不只是可以放byte在里面,也可以放别的类型数据,但是取出来的时候必须跟放进去的类型顺序也保持一致,否则会报错。(BufferUnderflowException
)
1 | public class NioTest5 { |
“对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。”
――《Think in Java》
下面一起来研究一下NIO的用法,先来一段示例代码:
1 | public class NioTest1 { |
Define your service using Protocol Buffers, a powerful binary serialization toolset and language
gRPC是基于Protobuf开发的RPC框架,简化了protobuf的开发,提供了服务端和客户端网络交互这一块的代码。
照着 https://grpc.io/docs/quickstart/java.html 测试一下官方的Demo。
记得要把Update a gRPC service
部分做了。
https://developers.google.com/protocol-buffers/
接下来看一下Google Protobuf的使用方式。Protobuf的主要作用是用来进行RPC的传输。它跟Apache Thrift属于同一个领域的框架,都可以用来序列化和反序列化数据进行传输。
目前Java中有一门比较成熟,同时也是EJB的标准的技术叫做RMI(remote method invocation)。RMI限制了只能基于Java调用。这种跨机器的调用,是客户端序列化后字节码再通过网络进行传输到服务端,服务端再反序列化数据进行代码调用。这就涉及到2个概念,
随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。
我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应用。在WebSocket规范提出之前,开发人员若要实现这些实时性较强的功能,经常会使用折衷的解决方法:轮询(polling)和Comet技术。其实后者本质上也是一种轮询,只不过有所改进。
Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.
本系列源码在
https://github.com/sail-y/netty
Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间处理的一致性方法,因此日期/时间API也是除Java核心API以外另一项倍受欢迎的内容。
为什么我们需要新的Java日期/时间API?
在开始研究Java 8日期/时间API之前,让我们先来看一下为什么我们需要这样一个新的API。在Java中,现有的与日期和时间相关的类存在诸多问题,其中有: