新型信用卡窃密工具出现
为什么没有布尔类型的缓冲区呢? 在 Java 中,boolean 类型数据只占用 1 bit,而在 IO 传输过程中,都是以字节为单位进行传输的,所以 boolean 的 1 bit 完全可以使用 byte 类型的某一位,或者 int 类型的某一位来表示,没有必要为了这 1 bit 而专门提供多一个缓冲区。 缓冲区解释ByteBuffer存储字节数据的缓冲区CharBuffer存储字符数据的缓冲区ShortBuffer存储短整型数据的缓冲区IntBuffer存储整型数据的缓冲区LongBuffer存储长整型数据的缓冲区FloatBuffer存储单精度浮点型数据的缓冲区DoubleBuffer存储双精度浮点型数据的缓冲区 分配一个缓冲区的方式都高度一致:使用allocate(int capacity)方法。
例如需要分配一个 1024 大小的字节数组,代码就是下面这样子。 理解了上面的图之后,BIO 和 NIO 的主要区别就可以用下面这个表格简单概括。 BIONIO面向流(Stream)面向缓冲区(Buffer)单向通道双向通道阻塞 IO非阻塞 IO选择器(Selectors) 缓冲区(Buffer)
缓冲区是存储数据的区域,在 Java 中,缓冲区就是数组,为了可以操作不同数据类型的数据,Java 提供了许多不同类型的缓冲区,除了布尔类型以外,其它基本数据类型都有对应的缓冲区数组对象。
字节流与字符流的转换从任何地方把数据读入到内存都是先以字节流形式读取,即使是使用字符流去读取数据,依然成立,因为数据永远是以字节的形式存在于互联网和硬件设备中,字符流是通过字符集的映射,才能够将字节转换为字符。 所以 Java 提供了两种转换流:
了解了 Java 传统的 BIO 中字符流和字节流的主要成员之后,至少要掌握以下两个关键点:
接下来我们再继续学习 NIO 知识,NIO 是当下非常火热的一种 IO 工作方式,它能够解决传统 BIO 的痛点:阻塞。
我们希望做到的是当线程等待 IO 完成时能够去完成其它事情,当 IO 完成时线程可以回来继续处理 IO 相关操作,不必干干的坐等 IO 完成。在 IO 处理的过程中,能够有一个专门的线程负责监听这些 IO 操作,通知服务器该如何操作。所以,我们聊到 IO,不得不去接触 NIO 这一块硬骨头。 新潮的 NIO
我们来看看 BIO 和 NIO 的区别,BIO 是面向流的 IO,它建立的通道都是单向的,所以输入和输出流的通道不相同,必须建立2个通道,通道内的都是传输0101001···的字节数据。 (编辑:衡水站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |