Java CharsetDecoder Exception - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 13.06.2013, 18:43   #1
Пользователь

Автор темы (Топик Стартер) Java CharsetDecoder Exception

внезапно пришлось работать с байтовыми потоками и т.п. на джаве и тут понеслось...
в данном случае мне нужно представить ByteBuffer в виде строки, в качестве дебага заполняю буфер массивом байт, полученного из хекс строки о_О
Код:
	byte[] bytedata = hexStringToByteArray(hexdata);
	ByteBuffer bindata = ByteBuffer.allocate(16384);
	bindata.put(bytedata);
	bindata.flip();
	bindata.order(ByteOrder.LITTLE_ENDIAN);
	System.out.println(bb_to_str(bindata));
преобразование байтбуфера в стринг спёрто из гугла
Код:
public static String bb_to_str(ByteBuffer buffer){
	Charset charset = Charset.forName("UTF-8");
	CharsetDecoder decoder = charset.newDecoder();
	String data = "";
	try{
		int old_position = buffer.position();
		data = decoder.decode(buffer).toString();
		buffer.position(old_position);  
	}catch (Exception e){
		e.printStackTrace();
		return "";
	}
	return data;
}
так вот
строка
Код:
String hexdata = "3b2e000000071d535441543a4465616c65645461736b3d313a313a313a3231303a3231300373707a0767616d656462643b280000000717535441543a506f6c6c3d313a313a313a3136323a3136320373707a0767616d656462643b2b000000071a535441543a50726f746f636f6c733d383a313a313a34303a34370373707a0767616d656462643b30000000071f535441543a5461736b517565756553697a653d323a303a303a3231303a31370373707a0767616d65646264";
без проблем проходит ччерез декодер, но строка
Код:
String hexdata = "3e2e000000061f474d3ab7fecef1c6f7315b7461673a315dbdbbd2d7bfaab9d8ceaa284f6e290373707a0567616d65643e2e000000061f474d3ab7fecef1c6f7315b7461673a315dc5c4c2f4bfaab9d8ceaa284f6e290373707a0567616d65643e2e000000061f474d3ab7fecef1c6f7315b7461673a315dd3cabcfebfaab9d8ceaa284f6e290373707a0567616d65643e2e000000061f474d3ab7fecef1c6f7315b7461673a315db0efc5c9bfaab9d8ceaa284f6e290373707a0567616d6564";
падает с ошибкой

Код:
java.nio.charset.MalformedInputException: Input length = 1
	at java.nio.charset.CoderResult.throwException(Unknown Source)
	at java.nio.charset.CharsetDecoder.decode(Unknown Source)
хотя в буфере лимит 186 >_> вопрос - чем декодеру не нравится вторая строка?

Последний раз редактировалось asura013; 14.06.2013 в 08:13.
asura013 вне форума Отправить сообщение для asura013 с помощью ICQ Отправить сообщение для asura013 с помощью Skype™ Ответить с цитированием
Непрочитано 13.06.2013, 22:09   #2
Аватар для VISTALL
Illussion is real

По умолчанию Re: Java CharsetDecoder Exception

Понимаете - декодер чтото ожидает. Знач не полные байты. Знакомое. Оно и не читалось
__________________
consulo.io - Consulo - multi-language IDE
VISTALL вне форума Ответить с цитированием
Непрочитано 14.06.2013, 08:17   #3
Пользователь

Автор темы (Топик Стартер) Re: Java CharsetDecoder Exception

фишка в том, что на пхп я этот хекс разбираю без проблем >_>
структура второй строки аналогична структуре первой - длина строки, строка, длина и т.п. брал хекс из tcpdump.
может есть другие способы байтбуфер в строку перегнать?
asura013 вне форума Отправить сообщение для asura013 с помощью ICQ Отправить сообщение для asura013 с помощью Skype™ Ответить с цитированием
Непрочитано 14.06.2013, 09:38   #4
Супергерой

По умолчанию Re: Java CharsetDecoder Exception

Код:
byte[] bytedata = new BigInteger(hexdata, 16).toByteArray();
ByteBuffer bindata = ByteBuffer.wrap(bytedata);
System.out.println(new String(bindata.array(), 0, bindata.limit(), Charset.forName("UTF-8")));
__________________
l2clientmod / l2io

Последний раз редактировалось acmi; 14.06.2013 в 10:12.
acmi вне форума Отправить сообщение для acmi с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 14.06.2013, 16:16   #5
Пользователь

Автор темы (Топик Стартер) Re: Java CharsetDecoder Exception

да, так ошибок не вылетает =) благодарю
asura013 вне форума Отправить сообщение для asura013 с помощью ICQ Отправить сообщение для asura013 с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка ГС! keksar Серверная часть 29 21.02.2011 20:55
Крепости (осады) Romanz Серверная часть 125 31.07.2010 18:12
баги и недочёты сервака Devilop Серверная часть 21 03.06.2010 23:50
Зависает после выбора сервера! Nales Серверная часть 8 09.05.2010 12:55
Проблема с L2Emu Gracia (CT2) ревизия 1232 Hunk Lineage II 9 28.02.2009 11:16


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 20:25. Часовой пояс GMT +3.

Вверх