【问题标题】:Converting String to InputStream, and OutputStream to String back again将String转换为InputStream,再将OutputStream转换为String
【发布时间】:2012-03-08 20:51:01
【问题描述】:

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

假设我有以下字符串:

String in = "1234567890123456";

然后我像这样将它转换为 ByteArrayInputStream:

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

我也有:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

然后我进行加密:

ch.encrypt(bais, baos);

所以现在我在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)工作正常,文件但我无法将字符串输入流和输出流到字符串正常工作。

【问题讨论】:

    标签: java string inputstream outputstream


    【解决方案1】:

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

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

    要将其转换为可让您将其转换回原始字节的合理字符串,您可能应该使用 hex 或 base64。根据我的经验,有一个 public domain base64 library 效果很好,或者有很多其他替代方案(对于 base64 和十六进制)。

    【讨论】:

    • 好的,我明白了,你能给我举个例子吗?
    • @cichy202:您已经将数据作为字节数组获取,所以只需使用String text = Base64.encodeBytes(b2);
    【解决方案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());
        }
    

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2020-09-28
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 2013-05-10
      • 2010-09-08
      • 2021-07-03
      • 2011-08-20
      相关资源
      最近更新 更多