Java NIO 笔记

    xiaoxiao2021-03-25  91

    Java NI/O 笔记

    不断更新学习笔记,欢迎直接留言交流,如转发请说明并附上链接,感谢!

    也是最近复习,才翻出这个笔记了,直接正文,慢慢整理丰富使用心得。 所谓NI/O:New I/O,当然不是这么简单~~它是区别于BI/O的none blocking I/O;

    以文件的读写为例,过去我们所习惯于buffer = new xxBuffer(new xxStream(new File(“path”))); 直接通过示例来说明,我们可以新的方式将File或其他实体对象序列化为byte后,使用缓存经过NI/O的 channel(通道)写入或替换文件处理:

    1、通过通道写入文件: 首先调用newByteChannel()方法以获取与文件链接的Path对象,然后打开文件,将返回的结果转换成Filechannel类型。 接下来分配字节缓存,并将数据写入到缓存中,在将数据写入到文件之前,在缓存上调用rewind()方法,将当前位置设置为0(每次写入文件之前,必须重置) 然后,对通道调用write()方法,传递缓存。

    ... // 看到try的特别写法了吧:),惊喜在最后 try (FileChanel fChan = (FileChannel) Files.newByteChannel( Paths.get("xxx.text"), StandardOpenOption.WRITE, StandardOpenOption.CREATE) ) { // 1 - create a buffer ByteBuffer buf = ByteBuffer.allocate(26); // 2 - write bytes to the buffer for (int i = 0; i < 26; i++) { buf.put( (byte) ('' + i) ); } // 3 - reset buf buf.rewind(); // 4 - use channel write buf to file fChan.write(buf); } catch (Exception e) { ... } finally { /** * 不用再对流进行close()显示地操作了,JDK 7开始有了非常新颖的携带资源的try语法, * 感谢Herbert Schildt大神知识贡献,他的书可以学到很多 * / }

    2、copy文件:

    Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);

    3、打开文件放入缓冲流:

    ... new BufferedInputStream(Files.newInputStream(Paths.get("xx.txt"))); bis.read();

    4、针对输出操作打开文件放入缓冲流:

    ... new BufferedOutputStream( Files.newOutputStream(Paths.get("xx.txt"), StandardOpenOption.WRITE..); bos.writ();

    如此完成了使用NI/O的方式去写替换文件。

    转载请注明原文地址: https://ju.6miu.com/read-25984.html

    最新回复(0)