是否有类似字节(byte ... b):byte []?

时间:2011-10-14 09:51:14

标签: java guava

我正在寻找一个简单的方法,我可以传递一些字节,如varargs,并返回一个byte [],如:

static byte[] byteArray(byte ...bytes){ return bytes;}

到目前为止我发现了......

java.lang.Byte没有它 java.util.Arrays没有它 com.google.common.primitives.Bytes.toArray(..)想要一个集合

示例用例:assertThat(actualArray,is(byteArray(1,2,3,4,5)));

2 个答案:

答案 0 :(得分:6)

没有任何功能,因为

new byte[]{1,2,3,4,5}

也很短。

修改 请注意任何这样的帮助方法

static byte[] toBytes(byte ... bytes)
{
   return bytes;
}

new byte{...}具有相同的问题:所有参数必须是实际字节,不会传播到int。因此,0xca之类的参数必须在{2}中投放到byte

byte ba1[] = new byte[]{ (byte)0xca };
byte ba2[] = toBytes( (byte)0xca );

如果您想要更简单的输入,那么您必须编写一个自定义方法,该方法分配一个字节数组并手动执行复制和转换。

答案 1 :(得分:0)

如果您将字节分配给byte[]类型的变量或字段,则可以比new byte[]{1, 2, 3, 4}更紧凑地编写:

byte[] bytes = {1, 2, 3, 4};

此外,0xca, 0xfe, 0xba, 0xbe的问题是所有这些值实际上都超出了Java byte的合法范围,因为Java中的byte签名的默认情况下。

也许你想要一个方法,它接受long...类型的参数并返回byte[],使用UnsignedBytes.checkedCastUnsignedBytes.saturatedCast来转换每个值。