2013-01-11 48 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