18_NIO

Java NIO简介

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方式进行文 件的读写操作。

Java NIO 与IO的主要区别

IO NIO
面向流(Stream Oriented) 面向缓冲区(Buffer Oriented)
阻塞IO(Blocking IO) 非阻塞IO(Non Blocking IO)
(无) 选择器(Selectors)

流,建立通道,直接面对数据的流动,输入输出都需要分别建立连接。(单向的)

管道:建立一个通道即可,通过buffer转载数据,buffer可读可写

传统的IO(面向流的)

image-20200916085552924

NIO:可以把通道理解成铁路,本身不能完成运输,需要借助buffer转载数据。NIO是面向缓冲区的传输,通道只是连接

image-20200916090025888

通道建立的是文件、磁盘、网络和程序的连接。比如磁盘文件的复制,我们需要建立被复制文件和程序的连接,将文件内容装入缓冲区中。然后建立复制文件和程序的通道,将缓冲区的内容写入新文件中。

@Test
public void testNIO() throws Exception {
   
  FileChannel fileChannel = FileChannel.open(Paths.get("1.txt"), StandardOpenOption.READ, StandardOpenOption.WRITE);
  ByteBuffer buffer = ByteBuffer.allocate(1024);
  System.out.println("读文件的内容....");
  fileChannel.read(buffer);
  buffer.flip();
  System.out.println(new String(buffer.array(), 0, buffer.limit()));
  buffer.clear();
  System.out.println("写入内容到文件中文件... ");
  buffer.put("文件的新内容".getBytes());
  buffer.flip();
  fileChannel.write(buffer);
  buffer.clear();


  fileChannel.close();
}

@Test
public void testIO() throws Exception {
   
  FileInputStream fis = new FileInputStream("1.txt");
  FileOutputStream fos = new FileOutputStream("1.txt");

  System.out.println("源文件内容:" + fis.read());
  fos.write("新的内容".getBytes());
  fos.close();
  fis.close();
}

缓冲区(Buffer)和通道(Channel)

通道和缓冲区

Java NIO系统的核心在于:通道(Channel)和缓冲区 (Buffer)。通道表示打开到 IO 设备(例如:文件、 套接字)的连接。若需要使用 NIO 系统,需要获取 用于连接 IO 设备的通道以及用于容纳数据的缓冲 区。然后操作缓冲区,对数据进行处理。

简而言之,Channel 负责传输, Buffer 负责存储

缓冲区(Buffer)

  • 缓冲区(Buffer):一个用于特定基本数据类 型的容器。由 java.nio 包定义的,所有缓冲区 都是 Buffer 抽象类的子类。

  • Java NIO 中的 Buffer 主要用于与 NIO 通道进行 交互,数据是从通道读入缓冲区,从缓冲区写 入通道中的。

一、缓冲区(Buffer):在 Java NIO 中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据
根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:
ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
上述缓冲区的管理方式几乎一致,通过 allocate() 获取缓冲区
  
二、缓冲区存取数据的两个核心方法:
put() : 存入数据到缓冲区中
get() : 获取缓冲区中的数据
  
三、缓冲区中的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值