创建具有特定大小和特定值的字节数组

时间:2015-12-09 00:00:56

标签: java arrays byte bytearray

我有let rec sum3 a = match a with | [] -> false | 1::2::xs -> true | 2::1::xs -> true | _::xs -> sum3 xs array字节10。我想创建一个具有特定大小的bytearray,并且它只会随机包含特定的byte 10,但频率必须几乎相同。

我明白了:

bytes

我想使用上面的public static byte[] a = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45}; 创建一个包含 2000 byte s 大小的二进制数据的文件。

1 个答案:

答案 0 :(得分:1)

最简单的方法(从代码的角度来看)是使用Collections.shuffle()来清理列表。要使用它,您需要使用所需的分发创建List个字节。

以下是一些代码:

byte[] a = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45};
int SIZE_MULTIPLIER = 20;

List<Byte> bytes = new ArrayList<>();
for (byte b : a) for (int i = 0; i < SIZE_MULTIPLIER; i++) bytes.add(b);
Collections.shuffle(bytes);
byte[] random = new byte[SIZE_MULTIPLIER * a.length];
for (int i = 0; i < bytes.size(); i++) random[i] = bytes.get(i);

注意,重要的不是初始数据的“随机”程度 - 在这种情况下,将元素0加载20次,然后元素1加载20次等等是方便的。

因为值的范围随机(每个元素的使用次数与其他每个元素的次数相同),最终数组的分布将与初始数组的分布相同