java如何实现zip分卷压缩问题
java写的zip压缩程序不能解决太大的文件压缩(大概2个g以上的大文件),请教如何用java实现zip的大文件分卷压缩。
------解决方案--------------------
摘抄  
 Java   1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java类实现zip数据压缩方式的编程方法。    
   zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据。与zip文件有关的几个Java类    
   •类ZipEntry    
        public   ZipEntry(String   name);    
        name为指定的数据项名。    
   •类ZipOutputStream    
        ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。下面是它的几个函数:    
            public   ZipOutputStream(OutputStream   out);     ∥利用输出流out构造一个ZIP输出流。  
            public   void   setMethod(int   method);     ∥设置entry压缩方法,缺省值为DEFLATED。    
           public   void   putNextEntry(ZipEntry   newe);     ∥如果当前的entry存在且处于激活状态时,                                                         关闭它,在zip文件中写入新的entry-newe并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。    
   •类ZipInputStream    
        ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。下面是它的几个函数:    
   public   ZipInputStream(InputStream   in);     ∥利用输入流in构造一个ZIP输出流。    
   public   ZipEntry   getNextEntry();     ∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。    
   public   void   closeEntry();     ∥关闭当前的zip   entry,并将数据流定位于下一个entry的起始位置。    
   程序代码及其注释下列的程序实现了数据文件zip方式的压缩和解压缩方法。randomData()函数随机生成50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP压缩文件;saveFile()函数将随机生成的数据存到ZIP格式的压缩文件中。    
   import   java.util.zip.*;    
   import   java.awt.event.*;    
   import   java.awt.*;    
   import   java.lang.Math;    
   import   java.io.*;      
   public   class   TestZip   extends   Frame   implements   ActionListener   {    
   TextArea   textarea;   ∥显示数据文件的多行文本显示域    
   TextField   infotip;   ∥显示数据文件未压缩大小及压缩大小单行文本显示域    
   String   doc;   ∥存储随机生成的数据    
   long   doczipsize   =   0;∥压缩数据文件的大小    
   public   TestZip(){     ∥生成菜单    
       MenuBar   menubar   =   new   MenuBar();    
        setMenuBar(menubar);    
       Menu   file   =   new   Menu("File",true);    
        menubar.add(file);    
        MenuItem   neww=   new   MenuItem("New");    
        neww.addActionListener(this);    
   file.add(neww);    
        MenuItem   open=new   MenuItem("Open");    
        open.addActionListener(this);    
        file.add(open);    
        MenuItem   save=new   MenuItem("Save");    
        save.addActionListener(this);    
        file.add(save);    
        MenuItem   exit=new   MenuItem("Exit");    
        exit.addActionListener(this);    
        file.add(exit);    
      ∥随机生成的数据文件的多行文本显示域    
        add("Center",textarea   =   new   TextArea());    
        ∥提示文本原始大小、压缩大小的单行文本显示域    
        add("South",infotip   =   new   TextField());    
   }      
   public   static   void   main(String   args[]){    
   TestZip   ok=new   TestZip();    
   ok.setTitle("zip   sample");    
   ok.setSize(600,300);    
   ok.show();    
   }      
   private   void   randomData(){    
   ∥随机生成50个double数据,并放在doc字符串变量中。    
   doc="";    
   for(int   i=1;i<51;i++){    
      double   rdm=Math.random()*10;    
      doc=doc+new   Double(rdm).toString();    
      if(i%5   ==   0)   doc=doc+"\n";    
      else   doc=doc+"   ";    
   }    
   doczipsize   =   0;    
   showTextandInfo();    
   }    
   private   void   openFile(){    
   ∥打开zip文件,将文件内容读入doc字符串变量中。    
   FileDialog   dlg=new   FileDialog(this,"Open",FileDialog.LOA   D);    
   dlg.show();    
   String   filename=dlg.getDirectory()+dlg.getFile();    
   try{    
   ∥创建一个文件实例    
   File   f=new   File(filename);