6

我使用下面的代码将字符序列转换为字节数组。然后我将字节数组作为 Blob 保存到我的 Sqlite 数据库中。

为此,我使用了以下代码,

 public static byte[] toByteArray(CharSequence charSequence) {
        if (charSequence == null) {
          return null;
        }
        byte[] barr = new byte[charSequence.length()];
        for (int i = 0; i < barr.length; i++) {
          barr[i] = (byte) charSequence.charAt(i);
        }

        return barr;
      }

现在我想将从 sqlite 检索到的字节数组转换为 Charsequence。但我无法得到任何帮助。

如何将字节数组转换为字符序列?

任何帮助深表感谢。

4

3 回答 3

20

将 aCharSequence转换为字节数组

CharSequence seq;
Charset charset;
...
byte[] bytes = seq.toString().getBytes(charset);

再次转换回来

CharSequence seq2 = new String(bytes, charset);

请记住,这CharSequence是一个由String, StringBuilder,StringBuffer等实现的接口,因此所有String实例都是CharSequence实例,但并非所有CharSequence实例都是实例,String但约定CharSequence是它的toString()方法应该返回等价的String

在内部,Java 中的所有字符串都表示为 Unicode,因此只要消费者和生产者都是 Java,使用的最安全的字符集就是数据的可能编码大小之一UTF-8UTF-16取决于数据的可能编码大小。在拉丁文字占主导地位的地方,

Charset charset = Charset.forName("UTF-8"); 

99.9% 的时间会给出最节省空间的编码,对于非拉丁字符集(例如中文),您可能会发现UTF-16根据您正在编码的数据集更节省空间。您需要进行测量以表明它是一种更节省空间的编码,并且正如UTF-8更广泛预期的那样,我推荐UTF-8在任何情况下作为默认编码。

于 2012-08-21T09:44:35.523 回答
8

看起来您正在使用 ASCII 数据(如果不是,您的代码非常有损)。

要从 ASCII 字节获取 CharSequence,您可以执行

CharSequence x = new String(theBytes, "US-ASCII");

对于其他编码,只需指定字符集的名称即可。

于 2012-08-21T09:39:45.273 回答
1
CharSequence c = new String(byte[]);
于 2012-08-21T09:39:27.097 回答