Показать сообщение отдельно
Непрочитано 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™ Ответить с цитированием