几个选择:
ByteArrayInputStreams
和其他几个类似的类根据定义是非阻塞的,因为数据已经在 VM 内存中。在这些情况下,available()
fromInputStream
可能是您需要的。当从程序外部的输入源(例如网络套接字、标准输入或什至文件)读取时,这将不起作用。
如果该markSupported()
方法针对特定InputStream
实例返回 true,则您可以在尝试对其使用后使用mark()
和reset()
方法返回到流的开头read()
。
编辑:
顺便说一句,ByteArrayInputStreams
支持mark()
和reset()
非常好,它们默认标记在位置0
。这段代码:
InputStream x = new ByteArrayInputStream(new String("1234567890").getBytes());
byte b[] = new byte[1];
x.read(b, 0 , 1);
System.out.println(b[0]);
x.read(b, 0 , 1);
System.out.println(b[0]);
x.reset();
x.read(b, 0 , 1);
System.out.println(b[0]);
有这个输出:
49
50
49