2011-09-22 57 views
2

可能重复:
Conversion of byte[] into a String and then back to a byte[]从字节数组转换为字符串,字符串字节数组中的Java

我有以下的代码块,我试图让测试通过,但似乎无法绕开Java世界中各种形式的编码。

import java.util.Arrays; 

class Test { 

static final byte[] A = { (byte)0x11, (byte)0x22, (byte)0x33, (byte)0x44, (byte)0x55, (byte)0x66, (byte)0x77, (byte)0x88, (byte)0x99, (byte)0x00, (byte)0xAA }; 

public static void main(String[] args) { 

    String s = new String(A); 

    byte[] b = s.getBytes(); 

    if (Arrays.equals(A,b)) { 
     System.out.println("TEST PASSED!"); 
    } 
    else { 
     System.out.println("TEST FAILED!"); 
    } 

} 
} 

我想我的问题是:什么是arbitary字节一个字节数组转换为一个Java字符串的正确方法,然后再对相同的Java String转换到另一个字节数组,这将具有相同的长度和原始字节数组的内容相同?

+0

我得到测试通过,你确定你正在运行的最新的代码? –

+0

原始字节数组的编码是什么? –

+1

@Mike K:http://ideone.com/To8IK –

回答

7

尝试特定编码:

String s = new String(A, "ISO-8859-1"); 

byte[] b = s.getBytes("ISO-8859-1"); 

ideone link

+1

,看起来像它的伎俩。我是一个后续问题,使用java字符串跨越JNI边界传递字节数组是否正确? –

+1

@XanderTulip我不太熟悉JNI,但通常使用字符串来表示字节数组可能是有损的。这个没有jbyteArray类型吗? –

+1

@XanderTulip您可以在传递字节数组JNI boundaries.See http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html#array –

4

使用Base64编码。

阿帕奇共享编解码器有一个Base64 class支持下列接口:

String str = Base64.encodeBase64String(bytes); 
byte[] newBytes = Base64.decodeBase64(str); 
+1

这似乎是一个很圆有关的方式来获得一个非常具体的和简单的字符串转换完成后,futhermore它需要使用非标准的Java库的,不知道,如果OP已经考虑到这一点。这是一个笑话答案? ;) –

+1

是的,它是圆的。不,这不是开玩笑的回答=) 的OP表明字节是任意的。 如果编码(神奇!)他选择不通过平台或字节数组支持包含不被支持的编码值时,将引发异常。 即使假设他选择了正确的编码,有一个回归测试套件和从未打算移动平台上,他很可能使用Apache共享别的东西 - 这是一个很常见的库。 ps。对迟到的反应表示歉意 –

相关问题