我想从二进制流中读取数据,其中的一部分应该被解析为UTF-8。从InputStream中读取文本和二进制数据
将InputStream
直接用于二进制数据,而对其UTF-8文本使用InputStreamReader
不起作用,因为即使读取最大值时阅读器也会预读并弄乱后续二进制数据n
个字符。
我认识到这个问题与Read from InputStream in multiple formats非常相似,但是提出的解决方案特定于HTTP流,这对我没有帮助。
我以为只是把所有东西都看成是二进制数据,然后把相关的部分转换成文本。但是我只有字符数据的长度信息,而不是字节。因此,我需要从流中读取字符的东西来了解编码。
有没有办法告诉InputStreamReader不要读取超过读取给定数量的字符所需的更多?还是有一个阅读器支持二进制数据和文本编码,并可以在这些模式之间切换?
问题是,对于UTF8,字节数可能与字符数不同。所以我需要找出字符串中多字节字符的数量,读取更多字节并再次进行转换,并一遍又一遍地进行处理,直到数字匹配。 – tajmahal
我会说你的格式不是很容易解码,如果可以,我会解决它。但是如果你知道字符数,你可以自己解析UTF-8。 (但发送实际数字字节会简单得多) –
另一种方法是读取比需要更多的数据。以预期的字符数量为例substring()并转换为UTF-8来确定长度。使用mark()和reset()并读取你现在知道的长度。 (这只有在UTF-8编码完全相同时才有效:|例如,nul字节\ 0以两种不同的方式编码。(其他字符也可以) –