如何在Java中将String表示的ByteBuffer转换为字节数组

时间:2014-09-16 12:19:02

标签: java scala

我是Java的新手,我不确定如何执行以下操作:

某个Scala应用程序将String转换为字节:

ByteBuffer.wrap(str.getBytes)

我将此字节数组收集为Java String,我希望对上面的Scala代码执行相反的操作,从而得到原始字符串(上面的对象str)。

ByteBuffer作为String开始是我唯一的选择,因为我正在从AWS Kinesis流中读取它(或者是它?)。 Scala代码也不应该改变。

示例字符串:

String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";

如何在Java中实现这一目标?

修改

好的,所以我会尝试详细说明这个过程:

  1. 第三方Scala应用程序生成我需要使用的CSV行
  2. 在将这些行存储在AWS Kinesis流中之前,应用程序会对每行执行以下操作:

    ByteBuffer.wrap(output.getBytes);
    
  3. 我从流中读取数据作为字符串,字符串可能如下所示:

    String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";
    
  4. 我需要将上面字符串的内容恢复为原始的,可读的形式;

  5. 我希望我现在更清楚了,很抱歉让你们开始困惑。

5 个答案:

答案 0 :(得分:2)

如果您想从byte[]转到String,请尝试new String(yourBytes)

getBytesString(byte[])都使用默认字符编码。


来自Amazon Kinesis Service API Reference

  

要放入记录的数据blob,在blob序列化时进行Base64编码。

您需要对字符串进行base64解码。使用Java 8,它看起来像:

byte[] bytes = Base64.getDecoder().decode("AAAAAAAAAAGZ7dFR0XmV23BR........");
str = new String(bytes, "utf-8"));

其他选项:Base64 Encoding in Java

答案 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
相关问题