2013-01-11 49 views
0

我想讀取來自的字符串行和字節數組一個 InputStream。我正在做這樣的時候:Java - 從1 InputStream讀取字節和字符串

// stream for reading byte arrays 
InputStream stream = process.getInputStream(); 
// reader for reading String lines 
BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); 

String msg = reader.readLine(); 
// if (msg == "data16") 
byte[] bytes = new byte[16]; 
stream.read(bytes); 

當我得到一個線DATA16讀者這意味着:16個字節的字節數組跟隨。問題是如果我嘗試從讀取字節我得到「data16」ASCII碼。這意味着當我用閱讀器閱讀時,流不會更新位置。有沒有辦法同步他們的立場?我知道DataInputStream可以做到這兩點:讀取字節數組和讀取行。但它的readLine方法已被廢棄,它不能正確地將字節轉換爲字符。

的字節數也可以包含0,10和13以及所有其他字節高達255

性能是很重要的,所以我真的不想讀字節後,字節或焦化物後焦。此外,如果可能的話,我想避免「手動」計數字節和字符讀取使用「跳過」方法。

+0

這是混淆二進制和文本數據的奇怪想法。我認爲在你的情況下,正確的方法(讀取一些元數據,例如「16字節的字節數組後跟隨」)是: *字節讀後字節; *解析命令(data16); *解析以下數據; – Kerb

回答

1

我不認爲你將能夠做你想做的。 BufferedReader不只是讀取新行,它是緩衝來自InputStream的數據。

你最好的選擇是自己做整件事,但你不必一次讀一個字節,你可以讀取一個緩衝區到內存中,並在此基礎上減少你的實際I/O 。

+0

你認爲BufferedReader的緩衝是問題嗎?然後,我將嘗試使用InputStream讀取所有內容,然後將一些字節組合到字符串中。 – Bitterblue

+0

如果你看看BufferedInputStream的來源,你可以看到它在處理換行符時的確切功能。你最終會做自己非常相似的事情 – tddmonkey