【发布时间】:2019-06-07 07:12:25
【问题描述】:
试图找到在非阻塞模式下从InputStream 读取所有字节的解决方案。当没有可用数据时,函数下方的 inputStream.read() 部分将永远阻塞。
private static String extract(InputStream inputStream) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int read = 0;
while ((read = inputStream.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, read);
}
baos.flush();
return new String(baos.toByteArray(), "UTF-8");
}
如何在不阻塞的情况下读取所有字节?
【问题讨论】:
-
你试过 IOUtils.toString(inputstream) 吗?
-
它;在非阻塞模式下无法从
InputStream读取。您必须使用面向缓冲区的 IO,而不是面向流的 IO。查看 NIO 包 -
您无法读取 任何 个字节而不会有阻塞的风险。你的问题体现了一个矛盾的术语。
InputStream正在阻塞,期间。但是,如果您想“读取所有字节”,为什么您认为需要非阻塞模式?
标签: java inputstream