我有一些客户端代码,其从插座中读取(经由一个输入流),并在一个循环中写入到文件中(经由的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();
}
(简化的代码来显示一般流程 - 我当我需要添加一个额外的写入器线程时,m只对学习感兴趣)
在什么时候(数据速率)我可能需要将文件写入操作拆分到另一个线程(即“writer”)在读写器线程之间有一个像ConcurrentLinkedQueue?
我的需求消息率低(即1400倍字节的MSG在最高〜10每秒)我跑的基准通量
测试代码表明它可以很容易地处理150000字节/秒。由于数据速率(不管它原来是什么)是恒定的,作者是否可以阻止足够长的时间,导致读者数据丢失?
还是只是良好的做法总是有一个读者和作家线程?
感谢闪电般的快速反应!你已经证实了我的怀疑。 (有点偏执狂从不伤害...) –