在Android中将字节数组转换为Charsequence

And*_*lva 5 java android type-conversion charsequence

我使用下面的代码将Charsequence转换为Byte Array.然后我将字节数组保存为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;
      }
Run Code Online (Sandbox Code Playgroud)

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

如何将字节数组转换为Charsequence?

任何帮助深表感谢.

Ste*_*lly 17

将a CharSequence转换为字节数组

CharSequence seq;
Charset charset;
...
byte[] bytes = seq.toString().getBytes(charset);
Run Code Online (Sandbox Code Playgroud)

要再转换回来

CharSequence seq2 = new String(bytes, charset);
Run Code Online (Sandbox Code Playgroud)

只要记住,CharSequence是通过实现的接口String,StringBuilder,StringBuffer等因此所有的String实例都是CharSequence实例,但不是所有CharSequence情况下都是String,但合同CharSequence是,它的toString()方法应该返回等效String

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

Charset charset = Charset.forName("UTF-8"); 
Run Code Online (Sandbox Code Playgroud)

将99.9%的时间提供最节省空间的编码,对于非拉丁字符集(例如中文),UTF-16根据您编码的数据集,您可能会发现更多的空间效率.您需要测量显示它是一种更节省空间的编码,并且在任何情况下UTF-8我都建议将其UTF-8作为默认编码使用.


Thi*_*ilo 8

看起来你正在使用ASCII数据(如果没有,你的代码是非常有损的).

要从ASCII字节获取CharSequence,您可以这样做

CharSequence x = new String(theBytes, "US-ASCII");
Run Code Online (Sandbox Code Playgroud)

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