【问题标题】:Replacement of Inputstream in java which doesn't have blocking function替换没有阻塞功能的java中的Inputstream
【发布时间】:2017-06-23 09:06:08
【问题描述】:

当我尝试使用多个并行请求调用inputstream.read 方法时,响应时间会增加。我认为它在读取前一个响应之前会被阻止。

InputStream 的替代方案是什么?

我正在使用 UNIX 域套接字,我正在尝试从输入流中读取数据,这里的代码我正在使用----------

-

UnixDomainSocketClient socket = new UnixDomainSocketClient(sockFileName, JUDS.SOCK_STREAM);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write(inputStreamData.getBytes());
String modelResponse = "";
while (true) {
            try {
                modelResponse += (char) in.read();
            } catch (Exception e) {
                break;

            }
        }
        out.flush();
        socket.close();
        in.close();
        out.close();
}

【问题讨论】:

  • 我已经实现了这个东西但仍然是同样的问题:(
  • 提供代码。或者看看非阻塞IO(docs.oracle.com/javase/8/docs/api/java/nio/channels/…
  • 嗨,JEY,我已附上代码。请看一下。我正在使用 UNIX 域套接字连接 Unix 套接字。试过Java NIO的各种非阻塞IO都无法修复错误。谢谢,拉吉
  • 你使用什么库 gor UnixDomainSocketClient ?检查它的文档。

标签: java inputstream blocking


【解决方案1】:

当我尝试使用多个并行请求调用输入流的 .read 方法时,响应时间会增加。我认为它在读取前一个响应之前会被阻止。

没有。在数据到达此套接字之前,它会被阻塞。它与其他套接字无关,除了机器上的整体负载。读取不会在不同的输入流之间进行排序。

InputStream 的替代方案是什么?

通过 NIO 包的非阻塞 I/O 或异步 I/O,但您没有正确识别您的问题。您的应用程序中可能有一些不适当的同步。或者你的诊断不正确。

【讨论】:

  • 我在上面附上了代码,请告诉我同步发生在哪里。如果您想了解有关该应用程序的任何其他信息,请随时询问。
  • 我只说“出现”,我已将其更改为“可能”,我们​​只知道您的应用程序首先对不同套接字进行顺序读取,这看起来像一个错误的诊断。您的代码令人震惊。它忽略流的结尾。如果read() 返回-1,则对等方已断开连接,并且您的代码不会记录IOExceptions。所以任何事情都可能发生,很可能是一个自旋循环。
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多