【发布时间】:2011-06-16 11:08:39
【问题描述】:
我在将 UTF8 字符串从 c 套接字发送到 java 套接字时遇到了一些麻烦。 以下方法可以正常工作:
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF8"));
main.title = in.readLine();
但是我需要一个 int java.io.InputStream.read(byte[] b, int offset, int length) 方法,该方法对于 BufferedReader 不存在。于是我尝试了一个 DataInputStream
DataInputStream in2 = new DataInputStream(socket.getInputStream());
但它读取的所有内容都是垃圾。
然后我尝试使用 DataInputStream 中的 readLine() 方法,但这并没有给我正确的 UTF8 字符串。
你看到了我的困境。我不能为一个 InputStream 使用两个阅读器吗?或者我可以将 DataInputStream.readLine() 结果转换为 UTF8 吗?
谢谢, 马丁
【问题讨论】:
-
我是否正确理解您在同一个套接字上,在同一个“对话”中发送文本和二进制数据?为同一个输入流创建两个阅读器应该没有问题。问题是知道何时(以及多少)阅读哪个读者。当您从它们读取数据时,它们都会消耗(并推进)基础流,因为您有混合类型的数据。您可以将流读取为字节,然后在代码中显式转换字节(new String(bytes, "UTF-8") 等)。或者您可以将通信拆分到两个不同的套接字上。
-
@pap:这很值得回答 ;-)
-
@pap:我同意,发表评论作为答案:)