Java中的套接字和流

时间:2017-12-13 21:00:11

标签: java sockets stream

我已经构建了一个客户端 - 服务器应用程序,两者正在通过套接字和流进行通信。 我的服务器创建了这些流:

this.out = new DataOutputStream(sock.getOutputStream());
this.in = new DataInputStream(sock.getInputStream());
this.bufread = new BufferedReader(newInputStreamReader(sock.getInputStream()));

然后从InputStream中读取:

type = this.in.readByte();
String name = this.bufread.readLine();

最后,客户端像这样写入OutputStream:

DataOutputStream out = new DataOutputStream(MyClient.getOutputStream());
out.writeByte(17);
out.writeBytes("value\n");

我从客户端发送字节,服务器正在读取字节。如果我从客户端发送字符,整数或其他任何内容,它仍将从服务器读取为字节?使用的特定功能是否确保读取数据类型?

1 个答案:

答案 0 :(得分:2)

您不能将相同的InputStream包装在两个不同的对象(DataInputStream和InputStreamReader)中。他们彼此不了解,会干扰彼此的行动。

将套接字的InputStream包装在一个对象中。由于您需要读取原始字节,因此DataInputStream最有意义。

正如您可能已经看到的那样,您无法使用readLine method of DataInputStream,因为它已被弃用。 不要尝试忽略该弃用并且无论如何都要使用它;它被弃用是因为它没有正确处理字符。

理想情况下,您应该使用readUTF方法,但必须确保服务器使用DataOutputStream.writeUTF发送字符数据才能生效。