Как насчет того, чтобы использовать другую карту внутренне, которая хранит значение, сочетание клавиш. Таким образом, я могу звонить, находят на нем?
Да: поддержите две карты с одной картой с помощью одного типа ключа и другого использования другой.
находка () в станд.:: карта, делающая последовательный поиск?
No это - двоичный поиск отсортированного дерева: его скорость является O (журнал (n)).
Я проделал нечто подобное (кодирование и декодирование в 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));
Надеюсь, это поможет.
Apache Commons имеет класс Base64 , который должен быть вам полезен:
Оттуда вы можете просто записать байты (они уже в читаемом формате )
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>
Ваш метод arrayToString ()
довольно странный (в чем смысл этого разделителя?). Почему бы просто не сказать
String s = new String(array, "US-ASCII");
Обратная операция:
byte[] array = s.getBytes("US-ASCII");
Используйте кодировку ASCII, которой должно быть достаточно при работе с данными в кодировке Base64. Кроме того, я бы предпочел кодировщик Base64 из авторитетного источника, такого как Apache Commons.
Для этого не нужно изобретать свой собственный тип данных XML. Схема XML определяет стандартные типы двоичных данных, такие как base64Binary , что именно вы и пытаетесь сделать.
После использования стандартных типов они могут быть автоматически преобразованы в двоичные с помощью некоторых синтаксических анализаторов (например, XMLBeans). Если ваш синтаксический анализатор не справляется с этим, вы можете найти классы для base64Binary во многих местах, поскольку этот тип данных широко используется в SOAP, XMLSec и т. Д.
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.
В Java 6 вы можете использовать DatatypeConverter для преобразования массива байтов в строку Base64:
byte[] imageData = ...
String base64String = DatatypeConverter.printBase64Binary(imageData);
И для обратного преобразования:
String base64String = ...
byte[] imageData = DatatypeConverter.parseBase64Binary(base64String);