вывод случайного byte[] в Java

159
18 ноября 2020, 06:00

Помогите разобраться, пожалуйста!

private static byte[] getRandomData() {
    byte[] result;
    Random rnd = new SecureRandom();
    rnd.setSeed(System.currentTimeMillis());
    result = new byte[Math.abs(rnd.nextInt() % 1024 * 10)];
    rnd.nextBytes(result);
    return result;
}

Такой код. result всегда равен [B@63947c6b А мне надо, чтобы случайно заполнялось

Answer 1

У вас происходит вывод адреса в памяти объекта result. Чтобы вывелись значения из массива следует вывести каждое значение по отдельности.

Например, так(цикл for):

for(int i; i < result.length; i++) 
  System.out.println(result[i]);

или так(цикл foreach)

for(byte i : result) 
  System.out.println(i);

или так(Stream API), но этот код хуже по производительности чем предыдущие:

Arrays.stream(result).forEach(System.out::println);

Тогда будет выводиться не объект, а значения хранящиеся в нем.

Answer 2

Для вывода содержимого массива в java удобно использовать метод Arrays.toString

System.out.println(Arrays.toString(array));

Генерировать же массив со случайными числами можно следующем образом:

private static byte[] getRandomArray(int size) {
    byte[] array = new byte[size];
    ThreadLocalRandom.current().nextBytes(array);
    return array;
}

Таким образом код целиком выглядет так:

System.out.println(Arrays.toString(getRandomArray(10)))
Answer 3

Можно через DatatypeConverter.printHexBinary показать содержимое:

byte[] data = getRandomData();
String hex = DatatypeConverter.printHexBinary(data);
System.out.println(data); // [B@4dc63996
System.out.println(hex);  // B70FE2772D49E15B5D008B4E53560B2136C8AFC8F4FE7F47AAA41C5252ADE...
READ ALSO
Как распечатать JPanel?

Как распечатать JPanel?

Пишу программу по учету заказов одного предприятияЕсть форма, которая по сути есть отчет, то есть на нее добавляется различная информация

182
Как в Intellij IDEA открыть 2 проекта сразу

Как в Intellij IDEA открыть 2 проекта сразу

Мне нужно открыть одновременно 2 проекта в Intellij IDEA в двух разных окнах, но чего-то я никак не соображу, как это сделать, подскажите, пожалуйста!

610
adb повреждает копируемый архив

adb повреждает копируемый архив

Программа на Android устройстве пакует файлы из /files/ в архивНеобходимо извлекать архив с помощью adb (другая программа на ПК должна будет запустить...

167
Округление абсолютного значения [дубликат]

Округление абсолютного значения [дубликат]

Как можно округлить число в зависимости от абсолютно значения? Те

218