我的目标是从套接字读取字节流到文件中,然后稍后作为我的应用程序的测试工具回放。在将字节写入磁盘的某个地方,一个字节会被错误地写入,看起来是随机的。Java窗口将字节写入文件,有些不正确
我的作家是这样的:
blobWriter = new BufferedOutputStream(new FileOutputStream(blobFileName));
blobChannel = Channels.newChannel(blobWriter);
我使用的是blobChannel
,这样我可以从一个ByteBuffer
直接写。在插座的每个读,我简单地缓冲传递给作家:
if (key.isReadable()) {
final int bytesRead= socketChannel.read(readBuffer);
if(bytesRead == -1)
{
logger.warn("no bytes to read");
break;
}
readBuffer.flip();
blobChannel.write(readBuffer);
...
<continue to process data>
}
当饲料直播,节目流程读入的记录,他们没有损坏。对每条消息说,它输出一个7字段的元组。其中之一,例如,是这样的:
(tupleid=0,msgType=110,feedId=225,venueId=30,orderId=160,symbol="CHF.NOK.SPOT",venueTime=44417979)
当的,而不是市场的实时连接,我勾应用程序播放同样的数据从磁盘读取器,处理后的输出进入疯狂:
(tupleid=0,msgType=110,feedId=225,venueId=30,orderId=160,symbol="CHF.-�ûnX",venueTime=44417979)
请注意腐败符号。
最奇怪的是,它会处理成千上万的消息具有相同的符号和其他领域没有问题,但然后莫名其妙地一个消息被损坏。并不总是符号字段是不正确的,有时orderId是错误的等...
我怀疑blobWriter
有时是错误写入。我的操作系统(Windows 7)可以做些什么奇怪的事情吗?我检查了notepad++
中保存到磁盘的字节流,实际上它显示了不正确的字节,所以错误必须在文件写入器中,而不是在我的播放机制中。此外,如果主应用程序本身有问题,它应该误读活动提要上的字节;它没有。
有谁知道什么可能会出错?
输出显示在哪里? –
哪个输出具体? –
你提到的'处理后的输出'。 –