我是Java的新手,我不确定如何执行以下操作:
某个Scala应用程序将String转换为字节:
ByteBuffer.wrap(str.getBytes)
我将此字节数组收集为Java String
,我希望对上面的Scala代码执行相反的操作,从而得到原始字符串(上面的对象str
)。
将ByteBuffer
作为String
开始是我唯一的选择,因为我正在从AWS Kinesis流中读取它(或者是它?)。 Scala代码也不应该改变。
示例字符串:
String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";
如何在Java中实现这一目标?
修改
好的,所以我会尝试详细说明这个过程:
在将这些行存储在AWS Kinesis流中之前,应用程序会对每行执行以下操作:
ByteBuffer.wrap(output.getBytes);
我从流中读取数据作为字符串,字符串可能如下所示:
String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";
我需要将上面字符串的内容恢复为原始的,可读的形式;
我希望我现在更清楚了,很抱歉让你们开始困惑。
答案 0 :(得分:2)
如果您想从byte[]
转到String
,请尝试new String(yourBytes)
。
getBytes
和String(byte[])
都使用默认字符编码。
来自Amazon Kinesis Service API Reference:
要放入记录的数据blob,在blob序列化时进行Base64编码。
您需要对字符串进行base64解码。使用Java 8,它看起来像:
byte[] bytes = Base64.getDecoder().decode("AAAAAAAAAAGZ7dFR0XmV23BR........");
str = new String(bytes, "utf-8"));
答案 1 :(得分:1)
我不确定我是否完全理解这个问题,但你的意思是这个吗?
String decoded = new String(bytes);
答案 2 :(得分:0)
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();
}
}
答案 3 :(得分:0)
抱歉,回答错误。 再次,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)
}
}
}
答案 4 :(得分:0)
对于Kinesis数据blob:
divs