2010-06-06 70 views
11

我在这里遇到了相当多的问题,我认为这是因为我不太了解如何使用Java提供的API。如何同时使用ByteArrayOutputStream和DataOutputStream(Java)

我需要编写一个intbyte[]byte[]

我想用一个DataOutputStream解决数据与writeInt(int i)write(byte[] b)写作,并能够将它放入一个字节数组,我应该使用ByteArrayOutputStream方法toByteArray().

据我所知,这个类使用的包装图案,所以我有两个选择:

DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream()); 

ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream()); 

但在这两种情况下,I “松散” 的方法。在第一种情况下,我无法访问toByteArray()方法,而在第二种情况下,我无法访问writeInt()方法。

我应该如何一起使用这个类?

回答

35

像这样:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream w = new DataOutputStream(baos); 

w.writeInt(100); 
w.write(byteArray); 

w.flush(); 

byte[] result = baos.toByteArray(); 

其实你的第二个版本将无法工作。 DataOutputStream需要在其中写入数据的实际目标流。你不能做new DataOutputStream()。实际上并没有这样的构造函数。

+0

我一直在想,是真的有我的理由刷新包裹'ByteArrayOutputStream'? – Justin 2010-06-06 14:49:25

+0

有没有,但你永远不知道包装的行为。它实际上可以缓冲一些东西,所以我通过习惯刷新包装:)。如果它是一个传递包装,它不应该伤害。 – 2010-06-06 17:37:30

+0

你可以声明byteArray变量吗?和什么其实w.write(byteArray);做? – 2012-06-30 01:49:21

1

使用前一种情况 - 换行DataOutputStream围绕ByteArrayOutputStream。只要确保保存对ByteArrayOutputStream的引用即可。当您完成关闭()或至少flush()DataOutputStream,然后使用ByteArrayOutputStream的toByteArray方法时。

1

如果通过PipedInputStream/PipetOutputStream将输出流连接到输入流,则可以使用流方法。然后你将使用输入流中的数据。

无论如何,如果你需要做的很简单,不不需要流的方法,我会用一个java.nio.ByteBuffer您拥有

  • put(byte[] src)byte[]
  • putInt(int value)
  • byte[] array()获取内容
2

您可以让一个变量来保存ByteArrayOutpu tStream并将其传递到DataOutputStream。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream dos = new DataOutputStream(baos); 
dos.writeInt(1); 
byte[] result = dos.toByteArray(); 
1

你鸵鸟政策需要更多像这样

Example exampleExample = method(example); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos); 
Message message = MessageBuilder.withBody(baos.toByteArray()).build(); 
+0

欢迎来到stackoverflow!请考虑**使用降价格式**'代码',以便阅读。更多信息:http://stackoverflow.com/editing-help – Aloso 2017-04-03 17:53:59

+0

谢谢抱歉 – mantamusica 2017-05-17 11:15:52

相关问题