Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Java CharsetDecoder Exception
#1
внезапно пришлось работать с байтовыми потоками и т.п. на джаве и тут понеслось...
в данном случае мне нужно представить 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 >_> вопрос - чем декодеру не нравится вторая строка?
Ответ
#2
Понимаете - декодер чтото ожидает. Знач не полные байты. Знакомое. Оно и не читалось
consulo.io - Consulo - multi-language IDE
Ответ
#3
фишка в том, что на пхп я этот хекс разбираю без проблем >_>
структура второй строки аналогична структуре первой - длина строки, строка, длина и т.п. брал хекс из tcpdump.
может есть другие способы байтбуфер в строку перегнать?
Ответ
#4
Код:
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")));
Ответ
#5
да, так ошибок не вылетает =) благодарю
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Сервер майнкрафт 1.17 не видит Java 16 Erikvd2244 0 590 05-18-2023, 05:59 PM
Последний пост: Erikvd2244
  Требуется Java разработчик в RVR мод л2 slimak 0 2,402 03-19-2018, 11:08 PM
Последний пост: slimak
  Java Unicode Boris2105 1 2,795 08-10-2017, 02:09 AM
Последний пост: klubheads
  Java junior Tails 18 7,174 07-17-2017, 03:52 PM
Последний пост: n3k0nation
  Установить старую java ZIP 2 3,396 09-27-2016, 10:39 AM
Последний пост: Aquanox
  Учебники и книги по Java 2 CHIPSET 47 55,204 09-06-2016, 10:14 PM
Последний пост: sawayik
  Java == API == Libraries Kenrix 1 2,216 05-11-2014, 05:28 PM
Последний пост: n3k0nation
  Java 8 JavaMan 33 9,437 04-08-2014, 01:06 PM
Последний пост: SouthBridge
  Опрос от Оракла: Особенности Java EE 8 JavaMan 0 1,522 01-11-2014, 04:13 AM
Последний пост: JavaMan
  Java NB Задачи на последовательность NDWT 0 2,199 12-26-2013, 04:47 PM
Последний пост: NDWT

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)