Java:InputStream.read不等待输入?

标签 java inputstream

天哪,我正在开发代理,但套接字的输入流之一很奇怪:

while(true) {
        try {
            while ((BytesRead = inputstream.read(Line)) != -1) {
                OtherSocket.Write(Line, BytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

我对 OtherSocket 有几乎相同的东西,但在这个上,它不断重复,就好像服务器不断发送数据一样,我猜测 inputstream.read(Line) 不等待输入而是返回 - 1. inputstream.read(Line) 是否有任何原因不等待输入?

最佳答案

我相信在套接字被另一端关闭后,InputStream.read 将继续返回 -1

为什么你想继续尝试从已经从 read 返回 -1 的流中读取数据?这对我来说似乎是错误。如果您想保留 while(true) 循环,您应该在内部 while 循环之后放置一个 break; 语句,这样如果您'我们刚刚成功地正常到达流的末尾,没有任何问题,您可以退出外循环。

顺便说一句,我强烈怀疑在流已经失败后尝试读取它也是一个坏主意。

(我还建议您开始遵循更传统的 Java 命名 - 看到 PascalCase 变量名称很奇怪。看到名为 Write方法也很奇怪- 这肯定不是 java.io.OutputStream 上的东西...)

关于Java:InputStream.read不等待输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725394/

相关文章:

java - 通过 Java 在 Matlab 中计算 MD5 哈希(符合 RFC 1321)

java - InputStreams 出现奇怪的空指针异常

java - 不读取文件

java - 数据库文件上的 ENOENT(没有此类文件或目录)

java - 反序列化包含一些不可反序列化对象的数组(抢救可反序列化部分)

java - 格式化输入流的正确方法

java - 如何在 System.in 上使用多个 Scanner 对象?

java - 使用 JUnit 测试函数,其中函数获取用户输入

Java将 double 解析为字符串

网络上的 Java 文件锁定