Я новичок в Java, и я не уверен, как сделать следующее:
Приложение Scala где-то преобразует строку в байты:
ByteBuffer.wrap(str.getBytes)
Я собираю этот массив байтов как String
Java, и я хочу сделать обратное тому, что сделал выше код Scala, следовательно, получить исходную строку (объект str
выше).
Получение ByteBuffer
как String
для начала является единственным вариантом, который у меня есть, поскольку я читаю его из потока AWS Kinesis (или это?). Код Scala также не должен изменяться.
Пример строки:
String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";
Как это можно достичь в Java?
РЕДАКТИРОВАТЬ
Хорошо, поэтому я попытаюсь подробнее рассказать о процессе:
Перед сохранением этих строк в потоке AWS Kinesis приложение выполняет следующие строки для каждой строки:
ByteBuffer.wrap(output.getBytes);
Я прочитал данные из потока в виде строки, и строка могла выглядеть следующим образом:
String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";
Мне нужно восстановить содержимое строки выше в ее исходную, читаемую форму;
Надеюсь, теперь я поняла, что извиняюсь за то, что вы все начинаете с удивления.
Если вы хотите перейти от byte[]
в String
, попробуйте new String(yourBytes)
.
Оба getBytes
и String(byte[])
используют кодировку по умолчанию.
Из справочника Amazon Kinesis Service API:
Данные blob помещаются в запись, которая кодируется Base64 при сериализации блока.
Вам нужно base64 декодировать строку. Используя Java 8, он будет выглядеть так:
byte[] bytes = Base64.getDecoder().decode("AAAAAAAAAAGZ7dFR0XmV23BR........");
str = new String(bytes, "utf-8"));
Другие варианты: кодировка Base64 в Java
Я не уверен, насколько я точно понимаю вопрос, но вы имеете в виду это?
String decoded = new String(bytes);
Для данных Kinesis:
private CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
decoder.decode(record.getData()).toString();
Извините, неверный ответ. Опять же, ByteBuffer - это класс java. Так они могут работать одинаково. Вам нужна версия Java.
От kafka ApiUtils:
def writeShortString(buffer:ByteBuffer,string:String){
if(String == null){
buffer.putShort(-1)
}
else{
val encodedString = string.getBytes("utf-8")
if(encodedString.length > Short.MaxValue){
throw YourException(Your Message)
else{
buffer.putShort(encodedString.length.asInstanceOf[Short])
buffer.put(encodedString)
}
}
}
public static void main(String[] args){
String decoded = new String(bytesData);
String actualString;
try{
actualString = new String(bytesData,"UTF-8");
System.out.printLn("String is" + actualString);
}catch(UnsupportedEncodingException e){
e.printstacktrace();
}
}
String str = "AAAAAAAAAAGZ7dFR0XmV23BR........"
str.toCharArray.map(_.toByte)
работать в Java?map(_.toByte)