我在这里遇到一个很大的问题,我认为这是因为我不太了解如何使用Java提供的API。

我需要写一个 intbyte[] 进入 byte[]

我想到了 DataOutputStreamwriteInt(int i)write(byte[] b), ,为了能够将其放入字节阵列中,我应该使用 ByteArrayOutputStream 方法 toByteArray().

我了解此类使用包装器图案,因此我有两个选择:

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

或者

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

但是在这两种情况下,我都会“放松”一种方法。在第一种情况下,我无法访问 toByteArray() 方法,第二个我无法访问 writeInt() 方法。

我应该如何一起使用此类?

有帮助吗?

解决方案

像这样:

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

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

w.flush();

byte[] result = baos.toByteArray();

实际上,您的第二个版本根本不起作用。 DataOutputStream 需要一个实际的目标流来写数据。你做不到 new DataOutputStream(). 。实际上没有这样的构造函数。

其他提示

您能否使一个变量保持到bytearrayoutputstream并将其传递到dataoutputstream中。

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

使用前案例 - 包裹 DataOutputStream 周围 ByteArrayOutputStream. 。只需确保您保存对 ByteArrayOutputStream. 。当您结束时()或至少flush()() DataOutputStream 然后使用TobyTearray方法 ByteArrayOutputStream.

如果将输出流连接到输入流,则可以使用流方式 PipedInputStream/PipetOutputStream. 。然后,您将消耗来自InputStream的数据。

无论如何,如果您需要做的事情很简单,并且不需要流方法,我会使用 java.nio.ByteBuffer 你有

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

你不需要这样的

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

整数类具有获取int字节值的方法。Integer.byteValue()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top