Java NIO 简单了解

Java NIO 简单了解

一直没有了解过NIO,更没有用过NIO,由于很多分布式框架或多或少都涉及到了NIO,因此,先做个简单了解。

NIO入门

推荐:NIO 入门,入门教程中没有比这篇更合适的了。

NIO文件读取和写入

一个简单的文件复制例子。

首先创建两个输入输出流:

FileInputStream fin = new FileInputStream("D:/test.txt");
FileOutputStream fout = new FileOutputStream("D:/copy.txt");

然后从输入输出流获取文件通道:

FileChannel fcin = fin.getChannel();
FileChannel fcout = fout.getChannel();

下面通过byte[]数组包装的ByteBuffer这里是由数组包装的目的是为了下面的输出文件的内容。

byte[] bytes = new byte[1024];
ByteBuffer buffer = ByteBuffer.wrap(bytes);

如果仅仅是读取流,可以直接使用ByteBuffer buffer = ByteBuffer.allocate(1024)这种方式创建ByteBuffer

然后通过一个循环来读取数据:

do {

在使用buffer前后先clear(),主要功能就是把标志位置为初始状态。

    buffer.clear();
    int r = fcin.read(buffer);

当读完的时候,终止循环:

    if (r == -1) {
        break;
    }

如果想要输出读取的内容,可以参考下面的方法,用ByteArrayOutputStream会更方便:

    System.out.print(new String(bytes, 0, r, "UTF-8"));

在写入之前,需要先调用bufferflip()方法,该方法也是通过修改标志位,可以根据实际的长度写入输出流中:

    buffer.flip();

写入输出流:

    fcout.write(buffer);
} while (true);

最后别忘了关闭流,这里需要注意一点,channel对象也有一个close()方法,该方法实际上是调用InputStreamOutputStreamclose()方法,所以这里最好的关闭方式,就是在Stream上调用close()

fin.close();
fout.close();

关于更多的细节,建议阅读:NIO 入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值