Java - кодирование Изображения в XML

Как насчет того, чтобы использовать другую карту внутренне, которая хранит значение, сочетание клавиш. Таким образом, я могу звонить, находят на нем?

Да: поддержите две карты с одной картой с помощью одного типа ключа и другого использования другой.

находка () в станд.:: карта, делающая последовательный поиск?

No это - двоичный поиск отсортированного дерева: его скорость является O (журнал (n)).

10
задан Hoopla 21 August 2009 в 15:58
поделиться

7 ответов

Я проделал нечто подобное (кодирование и декодирование в Base64), и это сработало как шарм. Вот что, я думаю, вам следует сделать, используя класс Base64 из проекта Apache Commons:

 //  ENCODING
 BufferedImage img = ImageIO.read(new File("image.png"));    
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 ImageIO.write(img, "png", baos);    
 baos.flush();
 String encodedImage = Base64.encodeToString(baos.toByteArray());
 baos.close(); // should be inside a finally block
 node.setTextContent(encodedImage); // store it inside node

 // DECODING
 String encodedImage = node.getTextContent();
 byte[] bytes = Base64.decode(encodedImage);
 BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));

Надеюсь, это поможет.

20
ответ дан 3 December 2019 в 14:18
поделиться

Apache Commons имеет класс Base64 , который должен быть вам полезен:

Оттуда вы можете просто записать байты (они уже в читаемом формате )

8
ответ дан 3 December 2019 в 14:18
поделиться

After you get your byte array

byte[] array = Base64.encode(os.toByteArray());

use an encoded String :

String encodedImg = new String( array, "utf-8");

Then you can do fun things in your xml like

<binImg string-encoding="utf-8" bin-encoding="base64" img-type="png"><![CDATA[ encodedIImg here ]]></binImg>
2
ответ дан 3 December 2019 в 14:18
поделиться

Ваш метод arrayToString () довольно странный (в чем смысл этого разделителя?). Почему бы просто не сказать

String s = new String(array, "US-ASCII");

Обратная операция:

byte[] array = s.getBytes("US-ASCII");

Используйте кодировку ASCII, которой должно быть достаточно при работе с данными в кодировке Base64. Кроме того, я бы предпочел кодировщик Base64 из авторитетного источника, такого как Apache Commons.

1
ответ дан 3 December 2019 в 14:18
поделиться

Для этого не нужно изобретать свой собственный тип данных XML. Схема XML определяет стандартные типы двоичных данных, такие как base64Binary , что именно вы и пытаетесь сделать.

После использования стандартных типов они могут быть автоматически преобразованы в двоичные с помощью некоторых синтаксических анализаторов (например, XMLBeans). Если ваш синтаксический анализатор не справляется с этим, вы можете найти классы для base64Binary во многих местах, поскольку этот тип данных широко используется в SOAP, XMLSec и т. Д.

1
ответ дан 3 December 2019 в 14:18
поделиться

The basic problem is that you cannot have an arbitrary bytestream in an XML document, so you need to encode it somehow. A frequent encoding scheme is BASE64, but any will do as long as the recipient knows about it.

0
ответ дан 3 December 2019 в 14:18
поделиться

В Java 6 вы можете использовать DatatypeConverter для преобразования массива байтов в строку Base64:

byte[] imageData = ...
String base64String = DatatypeConverter.printBase64Binary(imageData);

И для обратного преобразования:

String base64String = ...
byte[] imageData = DatatypeConverter.parseBase64Binary(base64String);
2
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: