Я пытаюсь понять byte [] в строку, строковое представление преобразования byte [] в byte [] ... Я конвертирую свой byte [] в строку для отправки, затем я ожидаю, что мой веб-сервис (написанный на python) передать данные прямо обратно клиенту.
Когда я отправляю данные из моего Java-приложения ...
Arrays.toString(data.toByteArray())
Отправлено байтов ..
[B@405217f8
Отправить (это результат Arrays.toString (), который должен быть строковым представлением моих байтовых данных, эти данные будут отправлены по сети):
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
На стороне python, сервер python возвращает строку вызывающей стороне (что я вижу, это то же самое, что строка, которую я отправил на сервер
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Сервер должен вернуть эти данные клиенту, где они могут быть проверены.
Ответ, который получает мой клиент (в виде строки), выглядит следующим образом
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Я не могу понять, как вернуть полученную строку обратно в байт.
Что бы я ни старался, я получаю байтовый массив, который выглядит следующим образом ...
[91, 45, 52, 55, 44, 32, 49, 44, 32, 49, 54, 44, 32, 56, 52, 44, 32, 50, 44, 32, 49, 48, 49, 44, 32, 49, 49, 48, 44, 32, 56, 51, 44, 32, 49, 49, 49, 44, 32, 49, 48, 57, 44, 32, 49, 48, 49, 44, 32, 51, 50, 44, 32, 55, 56, 44, 32, 55, 48, 44, 32, 54, 55, 44, 32, 51, 50, 44, 32, 54, 56, 44, 32, 57, 55, 44, 32, 49, 49, 54, 44, 32, 57, 55, 93]
или я могу получить представление байта, которое выглядит следующим образом:
B@2a80d889
Оба они отличаются от моих отправленных данных ... Я уверен, что мне не хватает чего-то действительно простого ....
Любая помощь?!
response
в моем ответе, то, к сожалению, нет, другого пути нет. Наилучшим способом было бы получить байты в виде необработанных данных (в виде двоичного кода) вместо строки или, возможно, даже в виде строки Base64, что потребовало бы только преобразования ее обратно в базовое 256 (двоичное) значение.Это выводит «классную строку» на консоль.
Это чертовски легко.
источник
byte[]
он получает представлен какString
; то есть"[97, 98, 99]"
нет[97, 98, 99]
. Это означает, что ваш ответ даже не относится к этой ситуации.String
наbyte[]
вString
. Я думаю, что вопросbyte[]
в том,String
чтобыbyte[]
.Что я сделал:
вернуться к клиентам:
получать от клиентов:
Ваши данные будут переданы в следующем формате:
источник
Что
Arrays.toString()
делает, это создает строковое представление каждого отдельного байта в вашем byteArray.Пожалуйста, проверьте API документацию Arrays API
Чтобы преобразовать вашу строку ответа обратно в исходный байтовый массив, вы должны использовать
split(",")
или что-то и преобразовать ее в коллекцию, а затем преобразовать каждый отдельный элемент в нем в байт, чтобы воссоздать ваш байтовый массив.источник
Его просто конвертировать байтовый массив в строку и строку обратно в байтовый массив в Java. нам нужно знать, когда правильно использовать «новый». Это можно сделать следующим образом:
преобразование байтового массива в строку:
Преобразование строки в байтовый массив:
Для получения более подробной информации, смотрите: http://evverythingatonce.blogspot.in/2014/01/tech-talkbyte-array-and-string.html
источник
Тип вывода, который вы видите из вашего байтового массива (
[B@405217f8
), также является выходом для байтового массива нулевой длины (т.е.new byte[0]
). Похоже, что эта строка является ссылкой на массив, а не описанием содержимого массива, как мы могли бы ожидать отtoString()
метода обычной коллекции .Как и в случае с другими респондентами, я бы указал на
String
конструкторы, которые принимаютbyte[]
параметр для построения строки из содержимого байтового массива. Вы должны иметь возможность читать необработанные байты из сокетов,InputStream
если вы хотите получать байты из TCP-соединения.Если вы уже прочитали эти байты как
String
(используяInputStreamReader
), то строку можно преобразовать в байты с помощьюgetBytes()
функции. Обязательно передайте желаемый набор символов как конструктору String, так иgetBytes()
функциям, и это будет работать только в том случае, если байтовые данные могут быть преобразованы в символы с помощьюInputStreamReader
.Если вы хотите иметь дело с необработанными байтами, вам действительно следует избегать использования этого слоя для чтения потоков.
источник
Можете ли вы не просто отправить байты как байты, или преобразовать каждый байт в символ и отправить как строку? Выполнение, как вы, займет не менее 85 символов в строке, когда у вас есть только 11 байтов для отправки. Вы можете создать строковое представление байтов, поэтому это будет «[B @ 405217f8», который можно легко преобразовать в объект
bytes
илиbytearray
объект в Python. В противном случае вы можете представить их как последовательность шестнадцатеричных цифр («5b42403430353231376638»), занимающую 22 символа, которые можно легко декодировать на стороне Python с помощьюbinascii.unhexlify()
.источник
[B@405217f8
это идентификатор объекта Java массива, а не его содержимое. Идентификатор объекта, конечно, не может «легко быть преобразован в байты или объекты байтовых массивов в python». Лучшее, что вы можете сделать по размеру, это преобразовать byte [] в строку base64.[JDK8]
Нанизывать:
К байтовому массиву:
источник
Если вы хотите преобразовать строку обратно в байтовый массив, вам нужно будет использовать
String.getBytes()
(или эквивалентную функцию Python), и это позволит вам распечатать исходный байтовый массив.источник
Используйте приведенный ниже API-интерфейс для преобразования байтового кода в виде строки в байтовый массив.
источник
[JAVA 8]
источник