我的目標是從套接字讀取字節流到文件中,然後稍後作爲我的應用程序的測試工具回放。在將字節寫入磁盤的某個地方,一個字節會被錯誤地寫入,看起來是隨機的。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++
中保存到磁盤的字節流,實際上它顯示了不正確的字節,所以錯誤必須在文件寫入器中,而不是在我的播放機制中。此外,如果主應用程序本身有問題,它應該誤讀活動提要上的字節;它沒有。
有誰知道什麼可能會出錯?
輸出顯示在哪裏? –
哪個輸出具體? –
你提到的'處理後的輸出'。 –