首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java NIO 缓冲区学习笔记

NIO中加入Buffer对象,体现了新库与原I/O的一个重要区别。在面向流的I/O中,您将数据直接写入或者将数据直接读到Stream对象中。 在NIO库中,所有数据都是用缓冲区处理的。...在读取数据时,它是直接读到缓冲区中的。在写入数据时,它是写入到缓冲区中的。任何时候访问NIO中的数据,您都是将它放到缓冲区中。 缓冲区实质上是一个数组。...ByteBuffer不是NIO中唯一的缓冲区类型。...事实上,对于每一种基本Java类型都有一种缓冲区类型(只有boolean类型没有其对应的缓冲区类): ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer...这里就会抛出java.nio.BufferUnderflowException异常,因为数组希望缓存区的数据能将其填满,如果填不满,就会抛出异常,所以代码应该改成下面这样: ?

50820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NIO缓冲区【复制缓冲区】

    两个缓冲区共享数据元素,拥有同样的容量,但每个缓冲区拥有各自的位置,上界和标记属性。对一个缓冲区内的数据元素所做的改变会反映在另外一个缓冲区上。这一副本缓冲区具有与原始缓冲区同样的数据视图。...如果原始的缓冲区为只读,或者为直接缓冲区,新的缓冲区将继承这些属性。...System.out.println(charbuffer2); charbuffer2.put("d"); } 输出: abc abc Exception in thread "main" java.nio.ReadOnlyBufferException...at java.nio.CharBuffer.put(Unknown Source) at java.nio.CharBuffer.put(Unknown Source) at com.sxt.nio.Demo02....main(Demo02.java:14) slice   分割缓冲区与复制相似,但slice()创建一个从原始缓冲区的当前位置开始的新缓冲区,并且其容量是原始缓冲区的剩余元素数量(limit-position

    1.2K00

    NIO缓冲区【基础内容】

    容量是固定的,但另外的三个属性可以在使用缓冲区时改变 2.3 缓冲区API介绍   接下来我们先看下Buffer中提供的方法 package java.nio; public abstract class...byteBuffer.mark()); } 输出: 初始时-->limit--->10 初始时-->position--->0 初始时-->capacity--->10 初始时-->mark--->java.nio.HeapByteBuffer...-------------- put完之后-->limit--->10 put完之后-->position--->4 put完之后-->capacity--->10 put完之后-->mark--->java.nio.HeapByteBuffer...byteBuffer.mark()); flip完之后-->limit--->4 flip完之后-->position--->0 flip完之后-->capacity--->10 flip完之后-->mark--->java.nio.HeapByteBuffer...b.length)); System.out.println("get完之后-->mark--->" + byteBuffer.mark()); 输出 b o b o get完之后-->mark--->java.nio.HeapByteBuffer

    54900

    【Netty】NIO 缓冲区 ( Buffer ) 组件

    NIO 三大核心组件 对应关系 II . 缓冲区 ( Buffer ) 类 III . 缓冲区 ( Buffer ) 机制 IV . 缓冲区 ( Buffer ) 机制 示例解析 V ....NIO 三大核心组件 对应关系 ---- 下图是 NIO 三大核心组件 , 选择器 ( Selector ) , 通道 ( Channel ) , 缓冲区 ( Buffer ) , 与 服务器端线程 ,...解析上图 NIO 核心组件对应关系 : ① 通道 缓冲区 对应 : 每个 通道 ( Channel ) 都对应一个 缓冲区 ( Buffer ) ; ② 选择器 通道 关联方式 : 每个 选择器 ( Selector...( Buffer ) 本质 : 缓冲区 ( Buffer ) 本质是一个数组 ; ③ 缓冲区 ( Buffer ) 双向机制 : NIO 中的 缓冲区 ( Buffer ) 是 双向 的 , 既可以读取数据...缓冲区 ( Buffer ) 类 ---- Buffer 常用子类 : ByteBuffer : 字节 缓冲区 ; ShortBuffer : 短整型 缓冲区 ; CharBuffer : 字符 缓冲

    59620

    NIO缓冲区【直接和非直接缓冲区】

    直接与非直接缓冲区   字节缓冲区跟其他缓冲区类型最明显的不同在于,它们可以成为通道所执行的 I/O 的源头和/或目标。...在Java中,数组是对象,而数据存储在对象中的方式在不同的JVM实现中都各有不同。出于这一原因,引入了直接缓冲区的概念。   直接字节缓冲区通常是I/O操作最好的选择。...将非直接缓冲区的内容复制到临时缓冲中。 使用临时缓冲区执行低层次I/O操作。 临时缓冲区对象离开作用域,并最终成为被回收的无用数据。   ...直接缓冲区是I/O的最佳选择,但可能比创建非直接缓冲区要花费更高的成本。直接缓冲区使用的内存是通过调用本地操作系统方面的代码分配的,绕过了标准JVM堆栈。...建立和销毁直接缓冲区会明显比具有堆栈的缓冲区更加破费,这取决于主操作系统以及JVM实现。直接缓冲区的内存区域不受无用存储单元收集支配,因为它们位于标准JVM堆栈之外。

    2K00

    NIO学习(一)Buffer缓冲

    一、IO和NIO的区别 IO是传统的面向流的阻塞IO,而NIO是面向缓冲区的非阻塞式IO。...在NIO中使用了一个线程来作为Selectors-选择器,来管理多个输入通道,即在使用时只需要将通道注册到选择器中,即可处理输入的通道和选择已经准备好的通道进行管理。...二、Buffer缓冲区与传统IO流 · 传统IO流是对字节数组的流动,单向的输入流和输出流,即面对流的传输。 · NIO本质上也是一个输入输出流。...但是NIO中使用了Buffer缓冲区,会将需要传输的数据存放到缓冲区中再结合通道来进行输入与输出,即面对缓冲区的传输。...· NIO的核心也在于缓冲区与通道,简单来说,缓冲区用于存储需要传输的数据,通用用于传输时的连接。 三、学习Buffer缓冲区 上述已提到,Buffer在NIO中主要负责数据的存储。

    47020

    【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )

    NIO 模型 II . NIO 三大组件交互流程 III . NIO 缓冲区 IV . NIO 与 BIO 对比 V . NIO 线程分配 VI . 缓冲区 ( Buffer ) 示例 I ....API 位置 : 在 Java 中 , NIO 定义在 java.nio 包中 ; ⑤ NIO 三大组件 : 通道 Channel : 相当于 BIO 中的 Socket , 用于传输数据 , 向客户端读写数据...NIO 缓冲区 ---- 缓冲区 机制 : 缓冲区 ( Buffer ) 向上与 通道 ( Channel ) 进行数据读写交互 , 向下与 客户端 进行数据读写交互 , 客户端 与 通道 ( Channel...) 不直接进行数据通信 ; ① 缓冲区 ( Buffer ) 作用 : 缓冲区 ( Buffer ) 是实现非阻塞机制的重要途径 ; ② 编程风格 : NIO 也称为 面向 缓冲区 编程 ; ③ BIO...; import java.nio.IntBuffer; public class BufferDemo { public static void main(String[] args) {

    96230

    java nio 详_java NIO 详解

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。...Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer...Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。...Java NIO缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。...缓冲区(Buffer) Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。

    72120

    Java NIO

    了解javaNIO,需要先了解同步异步以及阻塞非阻塞的概念,同步/异步,阻塞/非阻塞 NIO就是采用的同步非阻塞这种组合方式。或简单一点,采用的是IO复用的策略,可以使用一个线程管理多个IO连接。...Java中的NIO 原理接说到这里,下面看一下jdk中NIO的实现和用法。jdk中的NIO的实现,主要几个部分是Channel(通道),Buffer(缓冲区),Selector(选择器)。...每个Channel对应一个缓冲区Buffer,每次Channel中有数据可以读写的时候,就读写到缓冲区中。然后程序再对缓冲区进行操作。...参考文章: Java NIO系列教程 Java NIONIO概述 Java IO & NIO & NIO2 Java 网络 IO 模型 Java NIO系列教程(六) 多路复用器Selector Java...网络IO编程总结(BIO、NIO、AIO均含完整实例代码) Java NIO 反应堆模式简单模型 Java NIO(7): Epoll版的Selector Linux IO模式及 select、poll

    1.2K40

    Java NIO

    Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。...二、NIO和IO的主要区别 下表总结了Java IO和NIO之间的主要区别: IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 1、面向流与面向缓冲 Java IO和NIO...之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。...Java NIO缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。...而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。 2、阻塞与非阻塞IO Java IO的各种流是阻塞的。

    68630

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券