相关疑难解决方法(0)

是否可以从具有超时的InputStream读取?

具体来说,问题是写一个这样的方法:

int maybeRead(InputStream in, long timeout)
Run Code Online (Sandbox Code Playgroud)

如果数据在'timeout'毫秒内可用,则返回值与in.read()相同,否则为-2.在方法返回之前,任何生成的线程都必须退出.

为了避免参数,这里的主题是java.io.InputStream,由Sun(任何Java版本)记录.请注意,这并不像看起来那么简单.以下是Sun的文档直接支持的一些事实.

  1. in.read()方法可能是不可中断的.

  2. 将InputStream包装在Reader或InterruptibleChannel中没有帮助,因为所有这些类都可以调用InputStream的方法.如果可以使用这些类,则可以编写一个直接在InputStream上执行相同逻辑的解决方案.

  3. in.available()返回0总是可以接受的.

  4. in.close()方法可能会阻塞或不执行任何操作.

  5. 没有通用的方法来杀死另一个线程.

java timeout inputstream

142
推荐指数
7
解决办法
13万
查看次数

如何在Java中阻止线程在阻塞读取操作中等待?

我有一个执行以下代码的线程:

public void run() {
    try {
        int n = 0;
        byte[] buffer = new byte[4096];
        while ((n = in.read(buffer)) != -1) {
            out.write(buffer, 0, n);
            out.flush();
        }
    } catch (IOException e) {
        System.out.println(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里inSystem.in.我怎样才能优雅地停止这样的线程?无论是关闭System.in还是使用Thread.interrupt似乎都不起作用.

java multithreading stream

20
推荐指数
2
解决办法
2万
查看次数

我可以为InputStream的read()函数设置超时吗?

我有一个DataInputStream我从一个Socket.有什么办法可以设置超时dis.read(...)吗?目前我产生了一个新线程来进行读取.虽然父线程thread.join(timeout)在中断之前会等待.我知道nio,但我认为我不想在这一点上重构那么多.谢谢.

java io

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×3

inputstream ×1

io ×1

multithreading ×1

stream ×1

timeout ×1