Java读写小于2G的文件,可以采用内存映射文件方式。MappedByteBuffer是一种特殊类型的直接缓冲器,使用它我们必须制定映射文件的初始位置和映射区域的长度。
下面以读写1G的文件为例,简单地去应用一下直接缓冲器
// 2G以内的文件读写 // 创建读取文件通道 FileChannel rfc = new FileInputStream("E:/nio/test.dat").getChannel(); // 创建写文件通道 FileChannel wfc = new RandomAccessFile("E:/nio/my.dat", "rw").getChannel(); // 创建写文件直接缓冲器 此时写通道wfc.size()是0 此时要使用rfc.size()作为映射区域长度 MappedByteBuffer wb = wfc .map(FileChannel.MapMode.READ_WRITE, 0, rfc.size()); // 使用读取文件直接缓冲器rfc.size() 不能超过2G 没有测试 《Think in java》上写的阈值 MappedByteBuffer rb = rfc.map(FileChannel.MapMode.READ_ONLY, 0, rfc.size()); while (rb.hasRemaining()) { wb.put(rb.get()); } rb.clear(); wb.clear(); rfc.close(); wfc.close(); System.out.println("读取完毕");