2015-11-07 3 views
2

Использование Java 8 для разработки Android.Как я могу напечатать строку байта целого числа в сокет в Java?

Как напечатать целое число в base256 в сокете? Это код, который я пытался почему-то печатает 5 байт ...

PrintWriter out = new PrintWriter(
    new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
int FileSize = 430200; 
byte[] BytFileSize = ByteBuffer.allocate(4).putInt(FileSize).array(); 
String StrFileSize = new String(BytFileSize, "ISO-8859-1"); 
out.print(StrFileSize); 
out.flush(); 

Он печатает:

"00 06 c2 90 78" 

ОЖИДАЕМОГО является:

"00 06 90 78" 

странно, что он ставит «c2» между двумя 16-битными частями ...

+0

'Печать' и 'base 256' являются взаимно противоречивыми. Что заставляет вас думать, что количество base-256 может быть представлено как String? Почему вы делаете всю эту свертку, когда 'DataOutputStream.writeInt()' уже существует? – EJP

+0

В основном потому, что я не знал, что DataOutputStream существует. Большая часть моего опыта программирования находится на C++, и я просто изучаю Java для переноса моего клиента на Android. В C++ тип std :: string может содержать базовые 256 данных без проблем, так как это в основном (8-разрядный) char [], завернутый в класс ... Тип строки по умолчанию Java (разочаровывает) (16-разрядный) char [] и использует unicode по умолчанию ... Причина, по которой я хочу использовать строку, а не byte [], заключается в том, что я предпочитаю писать ООП, когда это возможно, и у меня есть строковые данные для отправки. Возможно, я просто напишу класс stdstring, который будет лучше соответствовать моим потребностям. – Willdorf

+0

http://stackoverflow.com/questions/33617245/is-there-a-string-type-in-java-based-on-on-an-8-bit-byte-array Я написал здесь небольшой класс, но оцените любые более простые решения! Спасибо вам всем! – Willdorf

ответ

0

Это работает:

OutputStream out = socket.getOutputStream(); 
int FileSize = 430200; 
byte[] BytFileSize = ByteBuffer.allocate(4).putInt(FileSize).array(); 
out.write(BytFileSize); 
out.flush(); 

Но я не знаю, почему PrintWriter (BufferedWriter (OutputStreamWriter (OutputStream))) печать (String) версия не работает правильно..