2012-08-31 134 views
3

我想测试我写入OutputStream(文件OuputStream)的字节与我从相同的InputStream中读取的字节相同。如何从InputStream中读取字节?

测试看起来像

@Test 
    public void testStreamBytes() throws PersistenceException, IOException, ClassNotFoundException { 
     String uniqueId = "TestString"; 
     final OutputStream outStream = fileService.getOutputStream(uniqueId); 
     new ObjectOutputStream(outStream).write(uniqueId.getBytes()); 
     final InputStream inStream = fileService.getInputStream(uniqueId); 
    } 

我意识到InputStream没有getBytes()

如何测试像

assertEquals(inStream.getBytes(), uniqueId.getBytes()) 

谢谢

回答

1

试试这个(IOUtils是公共-IO)

byte[] bytes = IOUtils.toByteArray(instream); 
+2

我相信IOUtils是commons-io,是不是'Java'提供了类似的东西? – daydreamer

+0

@daydreamer是的,使用'ByteArrayOutputStream'。 – oldrinb

0

Java不提供你想要什么,但你可以使用类似于PrintWriterScanner的文件包装流:

new PrintWriter(outStream).print(uniqueId); 
String readId = new Scanner(inStream).next(); 
assertEquals(uniqueId, readId); 
0

您可以从inputstream中读取数据并写入ByteArrayOutputStream,然后使用toByteArray()方法将其转换为字节数组。

1

你可以使用ByteArrayOutputStream

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

int nRead; 
byte[] data = new byte[16384]; 

while ((nRead = inStream.read(data, 0, data.length)) != -1) { 
    buffer.write(data, 0, nRead); 
} 

buffer.flush(); 

,并检查使用:

assertEquals(buffer.toByteArray(), uniqueId.getBytes()); 
-2

为什么不尝试这样的事情?

@Test 
public void testStreamBytes() 
    throws PersistenceException, IOException, ClassNotFoundException { 
    final String uniqueId = "TestString"; 
    final byte[] written = uniqueId.getBytes(); 
    final byte[] read = new byte[written.length]; 
    try (final OutputStream outStream = fileService.getOutputStream(uniqueId)) { 
    outStream.write(written); 
    } 
    try (final InputStream inStream = fileService.getInputStream(uniqueId)) { 
    int rd = 0; 
    final int n = read.length; 
    while (rd <= (rd += inStream.read(read, rd, n - rd))) 
     ; 
    } 
    assertEquals(written, read); 
} 
+0

不起作用。您必须独立于最后一次读取计数前移偏移量。 – EJP