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 入门

你可能感兴趣的:(JAVA编程)