Java 将字节数组转换为具有等效字节数的字符串

Java 将字节数组转换为具有等效字节数的字符串,java,android,arrays,string,byte,Java,Android,Arrays,String,Byte,是否可以将字节数组转换为字符串,但字符串的长度与数组中的字节数完全相同?如果我使用以下选项: byte[] data; // Fill it with data data.toString(); 字符串的长度与数组的长度不同。我认为这是因为Java和/或Android考虑了某种默认编码。数组中的值也可以是负值。理论上,应该可以将任何字节转换为某个字符。我想我需要弄清楚如何指定为每个字符生成固定单字节宽度的编码 编辑: 我尝试了以下方法,但无效: byte[] textArray; // Fil

是否可以将字节数组转换为字符串,但字符串的长度与数组中的字节数完全相同?如果我使用以下选项:

byte[] data; // Fill it with data
data.toString();
字符串的长度与数组的长度不同。我认为这是因为Java和/或Android考虑了某种默认编码。数组中的值也可以是负值。理论上,应该可以将任何字节转换为某个字符。我想我需要弄清楚如何指定为每个字符生成固定单字节宽度的编码

编辑:

我尝试了以下方法,但无效:

byte[] textArray; // Fill this with some text.
String textString = new String(textArray, "ASCII"); 
textArray = textString.getBytes("ASCII"); // textArray ends up with different data.

您可以使用字符串构造函数
String(byte[]data)
从字节数组创建字符串。如果还想指定字符集,可以使用
String(byte[]data,charset charset)
构造函数

US-ASCII
ISO-8859-1
代替
ASCII
尝试代码示例。ASCII不是Java或Android的内置字符编码,但这两种编码中有一种是。它们保证是单字节编码,但需要注意的是,不在字符集中的字符将被自动截断。

这应该可以正常工作

public static byte[] stringToByteArray(String pStringValue){
    int length= pStringValue.length();
    byte[] bytes = new byte[length];

    for(int index=0; index<length; index++){
        char ch= pStringValue.charAt(index);
        bytes[index]= (byte)ch;
    }

    return bytes;
}
公共静态字节[]stringToByteArray(字符串pStringValue){
int length=pStringValue.length();
字节[]字节=新字节[长度];

对于(int index=0;index我应该使用什么字符集?有些生成固定的2字节,有些生成可变宽度,有些只生成一个字节。我希望它是一个单字节。ASCII?我想您可以使用ASCII。我编辑了上面的注释以显示我尝试过的一些代码。它不起作用。数组中前后的值不同。显然,否定ve字节的编码方式不同。为什么要使用字符串?别无选择。Android强制您在将数据保存到SharePreferences时使用字符串。我拥有的数据是字节数组格式。解决方案是使用Base64编码。我将链接放在上面。如以下帖子所示,转换为Base64和从Base64转换。是的,为什么不使用Base64?它更安全,因为某些字节可能无法仅使用字符串正确表示。我认为使用Base64编码/解码是最佳做法-