Как обращать изображение в array байт в java?

Я стараюсь обращать изображение в договоренность байт в java, чтобы мочь сохранять это в базе данных, эх использованный несколько методов, чтобы реализовывать превращение, и могли бы говорить, что, если он это делает, но он всегда возвращает мне маленькую часть, этот один из кодов, который я занял:

public byte[] extractBytes(File imgPath) throws IOException {

        BufferedImage bufferedImage = ImageIO.read(imgPath);

        RecortaFotografia recorte = new RecortaFotografia(bufferedImage, 100, 100);

        WritableRaster raster = bufferedImage.getRaster();
        DataBufferByte data = (DataBufferByte) raster.getDataBuffer();

        return (data.getData());
    }

Но результат всегда - что-то сходное с этим:

[B@172675af

Я использовал другие методы для превращения и результат всегда - тот же самый. Я не нахожу мою ошибку, или что я врежу. Почему всегда меня возвращает только часть? или: как я могу получать всю цепь array байт?

1
задан 08.10.2016, 02:11
2 ответа

Но результат всегда - что-то сходное с этим:

[B@172675af

Это полностью нормально, почему ты печатаешь объект. Когда ты печатаешь объект - если нет sobreescrito метода toString то, что ты получишь:

NombreClase@hashcode

Это основные понятия. Чтобы печатать твою договоренность байт ты был бы должен делать простой for:

for(byte b : bytes) { System.out.print(b); }

Или в стиль lambda:

Arrays.stream(bytes).forEach(System.out::print);

Форма, легкая для того, чтобы изображение конвертироваться в byte[] она эта:

public static Optional<byte[]> toBinary(String path) {
    int len = path.split("\\.").length;
    String ext = path.split("\\.")[len - 1];
    try {
        BufferedImage img = ImageIO.read(new File(path));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(img, ext, baos);
        return Optional.of(baos.toByteArray());
    } catch(IOException e) {
        return Optional.empty();
    }
}

И мы использовали бы ее так:

Optional<byte[]> binary = ImageUtils.toBinary("ruta-abs-imagen");
// la imagen se procesó sin problemas y hay datos
if(binary.isPresent()) {
    byte[] image = binary.get();
}
2
ответ дан 24.11.2019, 13:10

Результат - стоимость Objeto что возвращает твой метод, может быть ты получаешь стоимость следующей формы

/* Por eso Obtienes ese valor */
System.out.println(extractBytes(new File("urlImage"))); 
  • Первая часть этого вывода показывает Тип Объекта в Вашем случае B что Byte
  • Вторая часть - представление hexadecimal hashCode () Вашего объекта.(172675af)

Чтобы Получать стоимость, которую он возвращает Ваш método он был бы должен получать их раньше. простой способ делать вышеупомянутую операцию был бы.

   byte[] retorno = extractBytes(new File("urlfile"));
    /* Imprimir los Bytes */
    for (byte s : retorno) {
        System.out.println(s& 0xff); 
     /* Si quiere hacer sus valores Positivos sino simplemente sout(s) */
    }

Другая форма, чтобы печатать, (Если он хочет сделать это) была бы используя класс Arraysи Ваш метод toString (байт [] array)

0
ответ дан 24.11.2019, 13:10