【发布时间】:2019-12-30 22:50:46
【问题描述】:
我正在使用具有固定缓冲区大小的 Java 的 MappedByteBuffer 来写入文件,作为分配的一部分。它应该逐个字符地写入,因为缓冲区大小可以小于行长。但问题是它将文件末尾缓冲区的剩余位置写为空字符。如何删除那些空字符?
这是一个示例代码:
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
public class Main {
public static void main(String[] args) throws IOException {
int bufferSize = 20;
RandomAccessFile file = new RandomAccessFile("test.txt", "rw");
MappedByteBuffer buffer = file.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, bufferSize);
for (char c : "Line1".toCharArray()) {
buffer.put((byte) c);
}
buffer.put((byte)'\n');
for (char c : "Line2".toCharArray()) {
buffer.put((byte) c);
}
}
}
这是输出(使用 Sublime Text utf-8 编码打开):
【问题讨论】:
-
你试过在
getChannel()返回的FileChannel上使用truncate()吗?
标签: java mappedbytebuffer