【问题标题】:Convert ZIP to byte array without saving the output to file将 ZIP 转换为字节数组而不将输出保存到文件
【发布时间】:2015-10-29 03:53:39
【问题描述】:

我有一个 ZIP 文件,当我将其转换为字节数组并对其进行编码时,如果不将其写入文件,我将无法打印编码格式。 谁能帮忙解决这个问题?

我的代码是

        InputStream is = null;  
        OutputStream os = null; 
        is = new FileInputStream("C:/Users/DarkHorse/Desktop/WebServicesTesting/PolicyCredit.zip");  
        os = new FileOutputStream("D:/EclipseTestingFolder/EncodedFile1.txt");  
        int bytesRead = 0;  
        int chunkSize = 10000000;  
        byte[] chunk = new byte[chunkSize];  
        while ((bytesRead = is.read(chunk)) > 0) 
        {  
         byte[] ba = new byte[bytesRead]; 
         for(int i=0;i<ba.length;i++)
                {
                    ba[i] = chunk[i];                       
                } 
             byte[] encStr = Base64.encodeBase64(ba);

             os.write(encStr);            
         } 

        os.close();
        is.close();
}

我在文件中的输出是

UEsDBBQAAAAIANGL / UboGxdAAQUAAK0WAAAQAAAAUG9saWN5Q3JlZGl0LnhtbJVY3Y6rNhC + r9R34AlqSPankSwkdtNskbLZKOk5Va8QC95d6wRIDZyeffszxgSMGUPKFcx8M / b8egwN87IWcZ6waF + cePLp // qLAw / d8BOL / mRxykRL6sk89T1KLq8adx1XLHp5i55YzkRc8SL3F6534y69O0oQpia6K6LiLTqwpBBpKdUPCRq P>

但是当我试图在屏幕上打印时,我遇到了这种情况

8569115686666816565656573657871764785981117112010065658185656575488765656581656565658571571159787785381517410890711084876110104116987486895189541147810467431145782515265108113838097110107831191071001167811510798769075791075386975681675753100541198273689012110110210211512212010383777185807570991205677479856101103119785655738799905411997704399101807611247471137665119471005666797647109821201211078276 P>

【问题讨论】:

  • 你能否格式化你的代码,使其可读
  • 如何在屏幕上打印?显示代码。
  • for(int i=0;i

标签: java


【解决方案1】:

您需要创建 Base 64 编码数据的字符串表示形式。

System.out.println( new String(encStr, Charset.forName("UTF-8")));

这里有一些其他的例子Base 64 Print Question

String Class

【讨论】:

    【解决方案2】:

    假设您的结果数组 byte[] encStr = Base64.encodeBase64(ba) 实际上是编码字符串,请尝试以下操作:

    System.out.println(new String(bytes, Charset.defaultCharset());
    

    【讨论】:

      【解决方案3】:

      如果您使用的是JDK 7,您可以使用Files.readAllBytes(path)

      您的代码会更简单,如下所示:

              Path path = Paths.get("C:/Users/DarkHorse/Desktop/WebServicesTesting/PolicyCredit.zip");
              byte[] data = Files.readAllBytes(path);
              byte[] encStr = Base64.encodeBase64(data);
              System.out.println( new String(encStr));
      

      您将能够在控制台上打印。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多