Байт Java в строку

Итак, я хочу преобразовать массив байтов, возвращаемый функцией getData() DatagramPacket, в строку. Я знаю, что способ преобразовать весь массив байтов в строку:

String str = new String(bytes);

Однако в конце выводятся нулевые символы. Итак, если массив байтов был

[114, 101, 113, 117, 101, 115, 116, 0, 0, 0]

0 выводят на консоль пустые поля. Итак, я в основном хочу распечатать:

[114, 101, 113, 117, 101, 115, 116]

Итак, я сделал эту функцию:

public void print(DatagramPacket d) {
        byte[] data = d.getData();
        for(int i=0; i< d.getLength(); i++) {
            if(data[i] != 0)
                System.out.println( data[i] );
        }
    }

Но, к сожалению, это печатает фактические цифры вместо букв. Итак, как я могу преобразовать каждый отдельный байт в строку и распечатать ее. Или, если есть другой способ распечатать массив байтов без нулей в конце, тогда это тоже будет хорошо.


person Richard    schedule 21.11.2013    source источник
comment
Итак, я хочу преобразовать массив байтов, возвращаемый функцией getData() DatagramPacket, в строку. - Какая кодировка использовалась для преобразования исходных текстовых данных в двоичные данные?   -  person Jon Skeet    schedule 21.11.2013
comment
возможный дубликат Что такое кодировка символов и почему Я заморачиваюсь с этим   -  person Raedwald    schedule 10.04.2015


Ответы (2)


Просто приведите каждое целое, не равное 0, к символу. Вы можете проверить это на своей печати:

System.out.println((char)data[i]);
person spydon    schedule 21.11.2013
comment
Вы не учитываете кодировку символов. Это будет работать, если данные, например, ASCII (потому что это совместимо с тем, как символы хранятся в Java), если нет, то вы получите странные результаты. - person Jesper; 21.11.2013
comment
@Jesper: я не думаю, что есть способ принять это во внимание, если он не укажет, в какой кодировке символов возвращаются данные? - person spydon; 21.11.2013
comment
Поскольку Ричард ничего не сказал о том, в какой кодировке символов находятся данные, мы не можем принять это во внимание, я просто прокомментировал, потому что ему нужно знать об этом. - person Jesper; 21.11.2013

Если вы хотите преобразовать массив байтов в строку, вы можете просто использовать конструкторы String(byte[] bytes) или String(byte[] bytes, Charset charset), например,

byte[] b=new byte[10];
b[0]=100;    
b[1]=101;
b[2]=102;
b[3]=0;
b[4]=0;     
String st=new String(b);    
System.out.println(st);//def

но если вы хотите напечатать один символ, то

char[] c=st.toCharArray();     
for(int i=0;i<c.length;i++){   
    System.out.println(c[i]);     
}
person Prashant Kumar    schedule 21.11.2013