Java Server - 如何从InputStreamReader获取输入并转换为String?

时间:2015-02-10 07:07:42

标签: java client server dataoutputstream inputstreamreader

我试图让一个非常简单的Client-Server系统工作,Client将字符串发送到Serverserver然后将该String存储到文件中。

客户端通过以下方式发送字符串:

//Other Code

sockStrm = new DataOutputStream (clientSocket.getOutputStream ());

//Other code

sockStrm.writeChars (line);

//Other code

服务器收到字符串:

//Other code 

strm = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ())); 

//Other code

stringLine = strm.readLine (); 

//Other code

当我发送字符串STOP时,客户端的字符串长度为4,而在服务器端,字符串的长度为9,显示为STOP

我试图在服务器端对收到的String进行子串,但没有运气。

有关如何处理此事的任何指示?

1 个答案:

答案 0 :(得分:3)

使用对称方法:

DataOutputStream sockStrm =...
sockStrm.writeUTF(str);

DataInputStream sockStrm = ...
String str = sockStrm.readUTF();

writeChars将单个字符写为两个字节值。读者遵循编码从字节序列重建字符串,对于每个字符代码,绝对不会根据高字节低字节。因此,您可以使用原始的低字节值获得一些零字节的混合,因此您仍然可以看到原始字符串值。 使用\ x00表示NULL字节:

S-T-O-P => on the line: \x00-S-\x00-T-\x00-O-\x00-P => prints as STOP

对传入字符串的字符使用循环并显示其整数值(str.charAt(i))以自行查看上述内容。