Java - 套接字从数据输入流中读取并且不会卡在其中
Java - Socket read from datainputstream and not get stuck in it
我一直在尝试用另一种语言与 Java 进行通信,但是当我尝试在 while 循环中从 DataInputStream 读取数据时...
static String getData(DataInputStream stream){
int charbyte;
StringBuilder strbuilder = new StringBuilder();
try {
while ((charbyte = stream.read()) != -1){
strbuilder.append(Character.toChars(charbyte));
}
stream.close();
return new String(strbuilder);
} catch (Exception e) {
return null;
}
}
问题是 stream.read() 没有返回 -1,因为它一直在等待发送新数据。我怎样才能得到刚刚发送的数据?
该方法永远不会 returns 因为 while 循环永远不会结束,这是由连接或 DataInputStream 保持打开状态引起的。
要通过 reader 读取字符流的网络连接发送可变数量的字节,您有以下三种选择:
- 发送要跟随的字节数,作为网络顺序中的 int,后跟尽可能多的字节。
- 如果字节是可打印字符,则发送一个空字节以指示结束。
- 发送字节后关闭流。
对于#1,将循环更改为
try {
int count = stream.readInt();
for( int i = 0; i < count; ++i ){
strbuilder.append(Character.toChars(stream.read()));
}
return strbuilder.toString();
}
对于#2,使用
try {
while ((charbyte = stream.read()) != 0){
strbuilder.append(Character.toChars(charbyte));
}
return strbuilder.toString();
}
您现在拥有的代码用于#3。
我一直在尝试用另一种语言与 Java 进行通信,但是当我尝试在 while 循环中从 DataInputStream 读取数据时...
static String getData(DataInputStream stream){
int charbyte;
StringBuilder strbuilder = new StringBuilder();
try {
while ((charbyte = stream.read()) != -1){
strbuilder.append(Character.toChars(charbyte));
}
stream.close();
return new String(strbuilder);
} catch (Exception e) {
return null;
}
}
问题是 stream.read() 没有返回 -1,因为它一直在等待发送新数据。我怎样才能得到刚刚发送的数据?
该方法永远不会 returns 因为 while 循环永远不会结束,这是由连接或 DataInputStream 保持打开状态引起的。
要通过 reader 读取字符流的网络连接发送可变数量的字节,您有以下三种选择:
- 发送要跟随的字节数,作为网络顺序中的 int,后跟尽可能多的字节。
- 如果字节是可打印字符,则发送一个空字节以指示结束。
- 发送字节后关闭流。
对于#1,将循环更改为
try {
int count = stream.readInt();
for( int i = 0; i < count; ++i ){
strbuilder.append(Character.toChars(stream.read()));
}
return strbuilder.toString();
}
对于#2,使用
try {
while ((charbyte = stream.read()) != 0){
strbuilder.append(Character.toChars(charbyte));
}
return strbuilder.toString();
}
您现在拥有的代码用于#3。