0
点赞
收藏
分享

微信扫一扫

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()​​,主要功能就是把标志位置为初始状态。

int

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

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

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

new String(bytes, 0, r, "UTF-8"));

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

buffer.flip();

写入输出流:

while (true);

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

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

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


举报

相关推荐

0 条评论