java,为什么DataInputStream在使用空格时拆分字符串
所以我试着学习java,为什么DataInputStream在使用空格时拆分字符串,java,sockets,datainputstream,Java,Sockets,Datainputstream,所以我试着学习Socket和DataInputStream 虽然我尝试了很多尝试,但我意识到,DataInputStreamread string as divided,意思如下: 客户端: dos = new DataOutputStream(socket.getOutputStream()); String msg = "okay test some String" dos.writeUTF(msg); dis = new DataInputStream(socket.getInput
Socket
和DataInputStream
虽然我尝试了很多尝试,但我意识到,DataInputStream
read string as divided,意思如下:
客户端:
dos = new DataOutputStream(socket.getOutputStream());
String msg = "okay test some String"
dos.writeUTF(msg);
dis = new DataInputStream(socket.getInputStream());
while(true){
msg = dis.readUTF();
Syso(msg);
}
okay
test
some
String
服务器端:
dos = new DataOutputStream(socket.getOutputStream());
String msg = "okay test some String"
dos.writeUTF(msg);
dis = new DataInputStream(socket.getInputStream());
while(true){
msg = dis.readUTF();
Syso(msg);
}
okay
test
some
String
结果:
dos = new DataOutputStream(socket.getOutputStream());
String msg = "okay test some String"
dos.writeUTF(msg);
dis = new DataInputStream(socket.getInputStream());
while(true){
msg = dis.readUTF();
Syso(msg);
}
okay
test
some
String
我想一行完整地阅读
msg
。我该怎么办?使用BufferedReader
dis = new BufferedReader(new InputStreamReader(socket.getInputs()))
while(true){
msg = dis.readLine()
System.out.println(msg);
}
或者,您可以将System.out.println
替换为System.out.print
,它不会在末尾打印新行字符
dis = new DataInputStream(socket.getInputStream());
while(true){
msg = dis.readUTF();
System.out.print(msg+" ");
}
我对您的程序进行了一点重构测试(它不能像这样编译),并且运行良好。如果继续出现这些错误,请记住DataInputStream和DataOutputStream正在使用自定义UTF实现,您只能将它们用于java应用程序之间的通信。我建议您也像@Arun所说的那样使用读写器接口,但是
显式地指定它们使用的字符集。Syso
做什么呢?DataInputStream
和DataOutputStream
的行为都不像这里所说的那样。显然是Syso
造成的。@ArunwriteUTF
为字符串的其余部分包含一个字节数,而readUTF
读取该字节数并继续读取该字节数。它不像你想象的那样工作。是的,我删除了评论。建议将dis=newdatainputstream(socket.getInputStream())
更改为dis=newbufferedreader(newinputstreamreader(socket.getInputStream())
和msg=dis.readUTF()
更改为msg=dis.readLine()