将String转换为InputStream,将OutputStream转换回String

时间:2012-03-08 20:51:01

标签: java string inputstream outputstream

我正在尝试进行此类转换,但我遇到了一些问题。

我们说我有一个跟随字符串:

String in = "1234567890123456";

然后我将它转换为ByteArrayInputStream,如下所示:

ByteArrayInputStream bais = new ByteArrayInputStream(in.getBytes("UTF-8"));

我也有:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

然后我加密:

ch.encrypt(bais, baos);

所以现在我有了#34;输出"在baos。当我这样做的时候:

byte[] b2 = baos.toByteArray();
int[] i2 = toUnsignedIntArray(b2);
writeIntegersAsHex(i2);

其中(我知道这不是最优雅的方式,但它仅用于测试):

 public static void writeIntegersAsHex(int[] integers) {
    int height = integers.length;
    for (int i = 0; i < height; i++) {
        System.out.print(Integer.toHexString(integers[i]) + ",");
    }
    System.out.println("");
}

我得到了这样的输出:

d1,68,a0,46,32,37,25,64,67,71,17,df,ee,ef,2,12,

并且该输出是正确的,因为当我处理包含与in相同的字符串的文件时,输出是相同的。但我无法从baos获得正确的字符串。

请不要问我为什么这样做,因为这不是我的电话。我是学生,这是学生之一。

算法(顺便说一下它的aes128)工作正常,有文件,但我无法将字符串输入到输入流,输出流到字符串工作正常。

2 个答案:

答案 0 :(得分:5)

  

但我无法从baos中获得正确的字符串。

此时您的输出只是任意二进制数据。它不是编码文本 - 它只是一堆信息。

要将其转换为合理的字符串,可以将其转换回原始字节,您应该使用hex或base64。有一个public domain base64 library在我的经验中很好用,或者很多其他替代方案(对于base64和hex)。

答案 1 :(得分:2)

public static void main(String[] args) throws IOException {
        String in = "1234567890123456";
        ByteArrayInputStream bais = new ByteArrayInputStream(in.getBytes("UTF-8"));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        int i;
        while ( ( i = bais.read() ) != -1  ){
            baos.write(i);
            baos.flush();
             }

        System.out.print(baos.toString());
    }