<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    網(wǎng)上介紹使用zipInStream和zipOutStream對文件或者文件夾進(jìn)行壓縮和解壓縮的文章比較多。
    但是這次項目中需要對byte[]進(jìn)行壓縮,然后decode,通過http發(fā)送到服務(wù)端。

    最簡單的方法,當(dāng)然是把byte[]寫到文件里,然后根據(jù)網(wǎng)上已有的文章,生成fileInputStream,構(gòu)造zipInStream。
    但是這個做法有著明顯的問題,需要操作IO,在效率上不可取。

    下面是利用ByteArrayOutStream來完成壓縮和解壓縮的代碼。



       
    /**
         * Answer a byte array compressed in the Zip format from bytes.
         * 
         * 
    @param bytes
         *            a byte array
         * 
    @param aName
         *            a String the represents a file name
         * 
    @return byte[] compressed bytes
         * 
    @throws IOException
         
    */
        
    public static byte[] zipBytes(byte[] bytes) throws IOException {
            ByteArrayOutputStream tempOStream 
    = null;
            BufferedOutputStream tempBOStream 
    = null;
            ZipOutputStream tempZStream 
    = null;
            ZipEntry tempEntry 
    = null;
            
    byte[] tempBytes = null;

            tempOStream 
    = new ByteArrayOutputStream(bytes.length);
            tempBOStream 
    = new BufferedOutputStream(tempOStream);
            tempZStream 
    = new ZipOutputStream(tempBOStream);
            tempEntry 
    = new ZipEntry(String.valueOf(bytes.length));
            tempEntry.setMethod(ZipEntry.DEFLATED);
            tempEntry.setSize((
    long) bytes.length);
            
            tempZStream.putNextEntry(tempEntry);
            tempZStream.write(bytes, 
    0, bytes.length);
            tempZStream.flush();
            tempBOStream.flush();
            tempOStream.flush();
            tempZStream.close();
            tempBytes 
    = tempOStream.toByteArray();
            tempOStream.close();
            tempBOStream.close();
            
    return tempBytes;
        }


        
    /**
         * Answer a byte array that has been decompressed from the Zip format.
         * 
         * 
    @param bytes
         *            a byte array of compressed bytes
         * 
    @return byte[] uncompressed bytes
         * 
    @throws IOException
         
    */
        
    public static void unzipBytes(byte[] bytes, OutputStream os) throws IOException {
            ByteArrayInputStream tempIStream 
    = null;
            BufferedInputStream tempBIStream 
    = null;
            ZipInputStream tempZIStream 
    = null;
            ZipEntry tempEntry 
    = null;
            
    long tempDecompressedSize = -1;
            
    byte[] tempUncompressedBuf = null;

            tempIStream 
    = new ByteArrayInputStream(bytes, 0, bytes.length);
            tempBIStream 
    = new BufferedInputStream(tempIStream);
            tempZIStream 
    = new ZipInputStream(tempBIStream);
            tempEntry 
    = tempZIStream.getNextEntry();
            
            
    if (tempEntry != null) {
                tempDecompressedSize 
    = tempEntry.getCompressedSize();
                
    if (tempDecompressedSize < 0) {
                    tempDecompressedSize 
    = Long.parseLong(tempEntry.getName());
                }

                
    int size = (int)tempDecompressedSize;
                tempUncompressedBuf 
    = new byte[size];
                
    int num = 0, count = 0;
                
    while ( true ) {
                    count 
    = tempZIStream.read(tempUncompressedBuf, 0, size - num );
                    num 
    += count;
                    os.write( tempUncompressedBuf, 
    0, count );
                    os.flush();
                    
    if ( num >= size ) break;
                }
            }
            tempZIStream.close();
        }



    評論

    # re: 使用Java.util.zip下的zipOutStream和zipInStream對字節(jié)流進(jìn)行壓縮和解壓縮  回復(fù)  更多評論   

    2007-09-27 19:20 by 千里冰封
    有些ZIP文件是不能解的

    # re: 使用Java.util.zip下的zipOutStream和zipInStream對字節(jié)流進(jìn)行壓縮和解壓縮  回復(fù)  更多評論   

    2007-09-27 21:06 by 云自無心水自閑
    這里提供的是壓縮和解壓縮的對稱方案啊。

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲不卡av不卡一区二区| 国产精品成人免费观看| 亚洲av网址在线观看| 国产高清视频在线免费观看| 一级做a爰全过程免费视频| 一个人免费观看日本www视频 | 亚洲国产成人精品无码区在线网站| 亚洲人AV永久一区二区三区久久| 成人毛片免费网站| 日韩中文字幕精品免费一区| a在线观看免费视频| 成年免费大片黄在线观看com| 亚洲欧美日韩综合久久久| 亚洲福利秒拍一区二区| 亚洲国产成人片在线观看无码| 亚洲成A∨人片天堂网无码| 国产高清在线免费视频| 成人免费网站在线观看| 午夜免费1000部| 亚洲一区在线免费观看| 亚洲视频免费播放| 美女内射毛片在线看免费人动物 | 亚洲日韩在线观看| 亚洲A∨精品一区二区三区| 久久久亚洲AV波多野结衣| 亚洲乱码国产乱码精品精| 国产亚洲精品a在线观看| 波多野结衣视频在线免费观看| 在线视频免费国产成人| 成熟女人特级毛片www免费| 免费A级毛片无码免费视| 免费H网站在线观看的| 日韩亚洲国产高清免费视频| a毛片基地免费全部视频| 日本黄网站动漫视频免费| 99久久精品日本一区二区免费| 97性无码区免费| 成年性羞羞视频免费观看无限| 成人毛片视频免费网站观看| 在线免费观看一级毛片| 内射无码专区久久亚洲|