【发布时间】:2017-02-02 15:36:15
【问题描述】:
我是 Java 新手,不知道如何执行以下操作:
Scala 应用程序在某处将字符串转换为字节:
ByteBuffer.wrap(str.getBytes)
我将此字节数组收集为 Java String,我希望与上面的 Scala 代码相反,因此得到原始字符串(上面的对象 str)。
将ByteBuffer 作为String 开始是我唯一的选择,因为我正在从AWS Kinesis 流中读取它(或者是吗?)。 Scala 代码也不应该改变。
示例字符串:
String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............";
如何在 Java 中实现这一点?
编辑
好的,所以我将尝试详细说明该过程:
- 第 3 方 Scala 应用程序生成我需要使用的 CSV 行
-
在将这些行存储在 AWS Kinesis 流中之前,应用程序对每一行执行以下操作:
ByteBuffer.wrap(output.getBytes); -
我从流中读取数据作为字符串,字符串可能如下所示:
String str = "AAAAAAAAAAGZ7dFR0XmV23BRuufU+eCekJe6TGGUBBu5WSLIse4ERy9............"; 我需要将上面字符串的内容恢复成原来的可读形式;
我希望我现在已经说得更清楚了,抱歉一开始就让大家感到困惑。
【问题讨论】:
-
不会像
str.toCharArray.map(_.toByte)这样的东西在Java 中工作吗? -
可能,但我不确定我是否理解您在
map(_.toByte)部分所做的操作 -
“我从流中读取数据作为字符串”——如何?您只是将字节数组传递给
String构造函数,还是使用某种编码,例如base64? -
我用谷歌搜索了 aws kinesis,似乎他们对记录进行了 base64 编码。更新了我的答案。
-
从这里学到的另一个教训:
GetShardIteratorResult.getShardIterator()只返回一个字符串,而GetRecordsRequest getRecordsRequest = new GetRecordsRequest();和getRecords(getRecordsRequest);获得所需的 ByteBuffer 类型。