几个选择:
ByteArrayInputStreams
和其他一些类似的类被定义非阻塞的,作为数据已经在VM内存。在这些情况下,您可能需要的available()
从InputStream
。当从程序外部的输入源读取时,这将使而不是工作,例如,网络套接字,标准输入或甚至文件。
如果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
这看起来像约翰(下面)要做的正确版本,虽然稍有不同,因为它返回的是一个int,但是原理相同。不过,我会请它重写一下,因为你在这里写的方式使'available()'看起来像一个静态方法,事实并非如此。如果它是一个静态方法,那么除非它需要一个输入,否则它将毫无用处,但它不是静态的。 – gnomed 2011-03-30 22:24:48
伙计们,我期待更多一点...首先,你真的认为我不知道inputStream接口中少数几个方法之一吗?其次,IS实现不同地实现这种方法,他们说你不应该依赖它... – lisak 2011-03-30 22:27:07
@Edgar看起来你基本上有三种选择。 1)Trust可用(),它的实现稍有不同,但对于Java API之后的任何事情基本上都是你想要的2)将它加载到Reader中并检查它是否准备就绪()3)mark()和reset() 。 – 2011-03-30 22:32:18