我有一些客户端代码从套接字读取(通过输入流)并在循环中写入文件(通过 BufferedWriter):
dataInStream = new BufferedInputStream(dataSocket.getInputStream());
outputFile = new BufferedWriter(new FileWriter(filename));
byte bytes[] = new byte[64];
Message msg = new Message();
int bytesRead = 0;
while (true) {
bytesRead = dataInStream.read(bytes, 0, 64);
// create a message from the raw data...
msg.parse(bytes);
// write it to the file as a String
outputFile.write(msg.toString());
outputFile.flush();
}
(显示一般流程的简化代码 - 我只在需要添加额外的编写器线程时对学习感兴趣)
在什么时候(数据速率方面)我可能需要将文件写入操作拆分到另一个线程(即“写入器”),在读取器和写入器线程之间使用类似ConcurrentLinkedQueue的东西?
我的要求消息速率很低(即 1400 字节消息,最多每秒 10 条消息)
我对吞吐量进行基准测试的测试代码表明它可以轻松处理 150000 字节/秒。由于数据速率(无论结果如何)是恒定的,写入器是否可以阻塞足够长的时间以导致读取器的数据丢失?
还是始终拥有读者和作者线程只是一种好习惯?