用GZIPInputStream读取URL后,如何再直接读出来?

时间:2021-06-29 04:25:45
小弟一段代码,url为已经建立好了的连接了.
public static void readLine(URL url) {
DataInputStream in = null;
DataOutputStream out = null;
GZIPInputStream gzip_in = null;
         GZIPOutputStream gzip_out = null;
try{
                      //如果直接读的话;
in = new DataInputStream(url.openStream());
}catch(Exception e){
e.printStackTrace();
}
              s = in.readLine();
        //可以再处理读过来的s,我这里读取出来的s差不多是一个配置文件形式的,一行一行的解析的,然后再根据一行一行解析出来的s再做处理.
}
可是我想在读之前对要读取的内容(我的内容都是文本格式的)用GZIPInputStream压缩一下,然后解开压再读,这样应该是效率高不少吧.可我弄了半天没弄出来.
try{
      gzip_in = new GZIPInputStream(new BufferedInputStream(url.openStream()));
       //可是这里怎么处理gzip_in了,就是处理成那种和上面一样的直接读就行的:
       s = gzip_in.readLine();形式的.

}
小弟对IO的概念总感觉不是很清,还有,在IO的应用过程中有很多的组合方式来应用,如果在我这里应该该用哪种方式用哪个类产生的效率会高一点了?
多谢各位指点.

15 个解决方案

#1


关注中......

#2


BufferedReader br=new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));

其中zf是 ZipFile zf=new ZipFile(args[0]);
Enumeration entries=zf.entries();
试试

#3


这里应该是要用到相对应的解压:GZIPOutputStream这个类的,我就是不会具体应用,如果是把压缩过后的东东写入文件,再用GZIPOutputStream读那个文件,让那个被压的文件还原倒还好办一点的,但是我这里直接处理不会啊.

#4


不知我是不是理解错了,是不是我的url所指那个文本文件(如a.txt)首先要用GZIPInputStream压缩好,然后再在网络上传?在这里读的时候才能用GZIPOutputStream解开来?

各位大侠帮帮忙

#5


用这个GZIP流不要再套用BUFFER。。流
new GZIPInputStream(url.openStream()));

#6


理解错了

效率应该比以前底了

GZIPInputStream 输入的是压缩过的数据流
url.openStream()得到的数据流不是压缩过的   应该是不行的

#7


import java.io.*;
import java.util.zip.*;

public class GZIPcompress {
  public static void main(String[] args) {
    try {
      BufferedReader in =
        new BufferedReader(
          new FileReader(args[0]));
      BufferedOutputStream out =
        new BufferedOutputStream(
          new GZIPOutputStream(
            new FileOutputStream("test.gz")));
      System.out.println("Writing file");
      int c;
      while((c = in.read()) != -1)
        out.write(c);
      in.close();
      out.close();
      System.out.println("Reading file");
      BufferedReader in2 =
        new BufferedReader(
          new InputStreamReader(
            new GZIPInputStream(
              new FileInputStream("test.gz"))));
      String s;
      while((s = in2.readLine()) != null)
        System.out.println(s);
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

#8


public class ZipCompress {
  public static void main(String[] args) {
    try {
      FileOutputStream f =
        new FileOutputStream("test.zip");
      CheckedOutputStream csum =
        new CheckedOutputStream(
          f, new Adler32());
      ZipOutputStream out =
        new ZipOutputStream(
          new BufferedOutputStream(csum));
      out.setComment("A test of Java Zipping");
      // Can't read the above comment, though
      for(int i = 0; i < args.length; i++) {
        System.out.println(
          "Writing file " + args[i]);
        BufferedReader in =
          new BufferedReader(
            new FileReader(args[i]));
        out.putNextEntry(new ZipEntry(args[i]));
        int c;
        while((c = in.read()) != -1)
          out.write(c);
        in.close();
      }
      out.close();
      // Checksum valid only after the file
      // has been closed!
      System.out.println("Checksum: " +
        csum.getChecksum().getValue());
      // Now extract the files:
      System.out.println("Reading file");
      FileInputStream fi =
         new FileInputStream("test.zip");
      CheckedInputStream csumi =
        new CheckedInputStream(
          fi, new Adler32());
      ZipInputStream in2 =
        new ZipInputStream(
          new BufferedInputStream(csumi));
      ZipEntry ze;
      System.out.println("Checksum: " +
        csumi.getChecksum().getValue());
      while((ze = in2.getNextEntry()) != null) {
        System.out.println("Reading file " + ze);
        int x;
        while((x = in2.read()) != -1)
          System.out.write(x);
      }
      in2.close();
      // Alternative way to open and read
      // zip files:
      ZipFile zf = new ZipFile("test.zip");
      Enumeration e = zf.entries();
      while(e.hasMoreElements()) {
        ZipEntry ze2 = (ZipEntry)e.nextElement();
        System.out.println("File: " + ze2);
        // ... and extract the data as before
      }
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

#9


也就是说如果要想以压缩的形式在网络上传输的话,(我做的是APPLET形式的),是不是首先将要传送的文件用JAVA的ZIP包处理成压缩过的文件,然后在网络的另一端读的时候就直接读压缩过的文件过去,然后再解开压来解析流里的数据????

#10


up

#11


解释:
   我曾做过仿照winzip的java实现的压缩工具,也曾经尝试过网络传输,即:一边压缩一边传输,但是经过我得各种方式,均未成功,最后还是在本机压缩后,读压缩文件传输的。
   我觉得一边压缩一边传输不太可能实现吧,不知楼主是否和我的问题一致?
   敬请高手、同仁赐教!

#12


其实,CS两端都可以使用原始数据,而在传输过程中使用GZIPOutputStream,这是可以实现的。

#13


newman0708(nch) :"其实,CS两端都可以使用原始数据,而在传输过程中使用GZIPOutputStream,这是可以实现的。"

两端使用原始数据?这就是说能够边在网络上传输边压缩了?不能老兄能否提供详细点的方法或代码,不胜感激!

另:如果我开始就在服务端压缩好了,但我那个是要将很多个文件压成一个文件的,这样我在读的时候能够解析那个压缩文件里面的一个个文件而将其内容读出来吧?

#14


请教高手:我要通过APPLET读取服务器上苦干个文件(文本文件),我能否开始将这若干个文本文件压缩成GZIP形式的,然后在APPLET中直接获得这个被压缩文件的输入流,然后再从该压缩文件流中取得每个未压之前的文件,按照未压的格式的读出来了?
    谢谢!

#15


接分

#1


关注中......

#2


BufferedReader br=new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));

其中zf是 ZipFile zf=new ZipFile(args[0]);
Enumeration entries=zf.entries();
试试

#3


这里应该是要用到相对应的解压:GZIPOutputStream这个类的,我就是不会具体应用,如果是把压缩过后的东东写入文件,再用GZIPOutputStream读那个文件,让那个被压的文件还原倒还好办一点的,但是我这里直接处理不会啊.

#4


不知我是不是理解错了,是不是我的url所指那个文本文件(如a.txt)首先要用GZIPInputStream压缩好,然后再在网络上传?在这里读的时候才能用GZIPOutputStream解开来?

各位大侠帮帮忙

#5


用这个GZIP流不要再套用BUFFER。。流
new GZIPInputStream(url.openStream()));

#6


理解错了

效率应该比以前底了

GZIPInputStream 输入的是压缩过的数据流
url.openStream()得到的数据流不是压缩过的   应该是不行的

#7


import java.io.*;
import java.util.zip.*;

public class GZIPcompress {
  public static void main(String[] args) {
    try {
      BufferedReader in =
        new BufferedReader(
          new FileReader(args[0]));
      BufferedOutputStream out =
        new BufferedOutputStream(
          new GZIPOutputStream(
            new FileOutputStream("test.gz")));
      System.out.println("Writing file");
      int c;
      while((c = in.read()) != -1)
        out.write(c);
      in.close();
      out.close();
      System.out.println("Reading file");
      BufferedReader in2 =
        new BufferedReader(
          new InputStreamReader(
            new GZIPInputStream(
              new FileInputStream("test.gz"))));
      String s;
      while((s = in2.readLine()) != null)
        System.out.println(s);
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

#8


public class ZipCompress {
  public static void main(String[] args) {
    try {
      FileOutputStream f =
        new FileOutputStream("test.zip");
      CheckedOutputStream csum =
        new CheckedOutputStream(
          f, new Adler32());
      ZipOutputStream out =
        new ZipOutputStream(
          new BufferedOutputStream(csum));
      out.setComment("A test of Java Zipping");
      // Can't read the above comment, though
      for(int i = 0; i < args.length; i++) {
        System.out.println(
          "Writing file " + args[i]);
        BufferedReader in =
          new BufferedReader(
            new FileReader(args[i]));
        out.putNextEntry(new ZipEntry(args[i]));
        int c;
        while((c = in.read()) != -1)
          out.write(c);
        in.close();
      }
      out.close();
      // Checksum valid only after the file
      // has been closed!
      System.out.println("Checksum: " +
        csum.getChecksum().getValue());
      // Now extract the files:
      System.out.println("Reading file");
      FileInputStream fi =
         new FileInputStream("test.zip");
      CheckedInputStream csumi =
        new CheckedInputStream(
          fi, new Adler32());
      ZipInputStream in2 =
        new ZipInputStream(
          new BufferedInputStream(csumi));
      ZipEntry ze;
      System.out.println("Checksum: " +
        csumi.getChecksum().getValue());
      while((ze = in2.getNextEntry()) != null) {
        System.out.println("Reading file " + ze);
        int x;
        while((x = in2.read()) != -1)
          System.out.write(x);
      }
      in2.close();
      // Alternative way to open and read
      // zip files:
      ZipFile zf = new ZipFile("test.zip");
      Enumeration e = zf.entries();
      while(e.hasMoreElements()) {
        ZipEntry ze2 = (ZipEntry)e.nextElement();
        System.out.println("File: " + ze2);
        // ... and extract the data as before
      }
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

#9


也就是说如果要想以压缩的形式在网络上传输的话,(我做的是APPLET形式的),是不是首先将要传送的文件用JAVA的ZIP包处理成压缩过的文件,然后在网络的另一端读的时候就直接读压缩过的文件过去,然后再解开压来解析流里的数据????

#10


up

#11


解释:
   我曾做过仿照winzip的java实现的压缩工具,也曾经尝试过网络传输,即:一边压缩一边传输,但是经过我得各种方式,均未成功,最后还是在本机压缩后,读压缩文件传输的。
   我觉得一边压缩一边传输不太可能实现吧,不知楼主是否和我的问题一致?
   敬请高手、同仁赐教!

#12


其实,CS两端都可以使用原始数据,而在传输过程中使用GZIPOutputStream,这是可以实现的。

#13


newman0708(nch) :"其实,CS两端都可以使用原始数据,而在传输过程中使用GZIPOutputStream,这是可以实现的。"

两端使用原始数据?这就是说能够边在网络上传输边压缩了?不能老兄能否提供详细点的方法或代码,不胜感激!

另:如果我开始就在服务端压缩好了,但我那个是要将很多个文件压成一个文件的,这样我在读的时候能够解析那个压缩文件里面的一个个文件而将其内容读出来吧?

#14


请教高手:我要通过APPLET读取服务器上苦干个文件(文本文件),我能否开始将这若干个文本文件压缩成GZIP形式的,然后在APPLET中直接获得这个被压缩文件的输入流,然后再从该压缩文件流中取得每个未压之前的文件,按照未压的格式的读出来了?
    谢谢!

#15


接分