FileChannel与ByteBuffer的使用示例
生活随笔
收集整理的這篇文章主要介紹了
FileChannel与ByteBuffer的使用示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?DirectByteBuffer直接內存的使用場景和作用
生命周期長的大對象,
減少java堆GC, 減少內存copy
http://www.importnew.com/26334.html
?
1 public class DirectByteBufferTest { 2 3 4 @Test 5 public void test_copyFile() throws IOException { 6 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(10);//100kbytes 7 FileChannel readChannel = FileChannel.open(new File("D:/in.txt").toPath()); 8 //out.txt必須已經存在, writeChannel必須以WRITE方式打開 9 FileChannel writeChannel = FileChannel.open(new File("D:/out.txt").toPath(), StandardOpenOption.WRITE); 10 int read; 11 while ((read = readChannel.read(byteBuffer)) != -1) { 12 //buffer從讀切換到寫 13 byteBuffer.flip(); 14 // 打印信息必須放在flip后面, 否則decode出來的是上次read的結果.根據in.txt的字符編碼修改下面的ISO_8859_1 15 //System.out.println(read + "--" + StandardCharsets.ISO_8859_1.decode(byteBuffer)); 16 writeChannel.write(byteBuffer); 17 // 寫完之后清空緩沖區,否則read=0一直死循環 18 byteBuffer.clear(); 19 } 20 writeChannel.close(); 21 readChannel.close(); 22 } 23 }?測試其他總結:
ByteBuffer.allocateDirect緩沖區大小根據輸入文件的大小調整,但是太大時輸出性能也提高不了多少, 對于大文件,1M的緩存區應該差不多了。對于超大文件, 應該換成其他讀取方式轉載于:https://www.cnblogs.com/yszzu/p/9402051.html
總結
以上是生活随笔為你收集整理的FileChannel与ByteBuffer的使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 时间转换去杠
- 下一篇: 线程队列 线程池 协程