Java - 套接字从数据输入流中读取,而不会卡在其中



我一直在尝试从另一种语言到 Java 进行通信,但是当我尝试在一段时间循环中从 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,因为它只是一直在等待新数据发送。如何获取刚刚发送的数据?

该方法永远不会返回,因为 while 循环永远不会结束,这是由连接或 DataInputStream 保持打开状态引起的。

要通过读取器读取字符流的网络连接发送可变数量的字节,您有三个选项:

  1. 按网络顺序发送要跟随的字节数,作为 int,后跟尽可能多的字节。
  2. 如果字节是可打印字符,请发送空字节以指示结束。
  3. 发送字节后关闭流。

对于 #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。

相关内容

  • 没有找到相关文章

最新更新