2011-10-25 66 views
0

前言:我是一个完全的Java noob ...我昨天刚写了Hello World。怜悯我的自我。从Java的标准输入到标准输出的GZipping

我不确定如何从标准输入或输出读取到Java中的标准输出。我知道有像Scanners和System.out.println这样的东西,但这似乎并不直接适用于我想要做的事情。

特别是,我试图在标准输入上使用GZip并将压缩结果输出到标准输出。我看到有一个GZipOutputStream class,我一定会使用。但是,如何初始化输出流以指向std输出?此外,我怎样才能从标准输入读取?

我该如何做到这一点?如何压缩标准输入并将结果输出到标准输出?

(这里是什么,我试图完成一个图:标准输入 - > GZIP(通过我的Java程序) - > STD输出(STD输入的压缩版本)

回答

3

看看的下面的构造函数:。GZIPInputStream(InputStream in)要获得标准输入为InputStream,使用System.in从流中读取与read(byte[] buf, int off, int len)做方法 - 看看进行了详细的说明文档 整个事情会是这样的

GZIPInputStream i = new GZIPInputStream(System.in); 
byte[] buffer = new byte[1024]; 
int n = i.read(buffer, 0,buffer.length) 
System.out.println("Bytes read: " + n); 

我个人发现流在Java中有一个陡峭的学习曲线,所以我建议在线阅读任何教程。

我会把它作为练习来确定输出。

- 免责声明:实际上还没有尝试过的代码

+0

这是有帮助的,虽然我没有实际使用GZIPInputStream,因为我并不需要解压的输入。 –

+0

您可以使用类似的方法创建GZIPOutputStream(System.out)。 –

+0

当然,这就是为什么我说这是有益的,并给它一个upvote! –

0
import java.io.IOException; 
import java.util.zip.GZIPOutputStream; 

public class InToGzipOut { 
    private static final int BUFFER_SIZE = 512; 

    public static void main(String[] args) throws IOException { 
     byte[] buf = new byte[BUFFER_SIZE]; 
     GZIPOutputStream out = new GZIPOutputStream(System.out); 
     int len; 
     while ((len = System.in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
     out.finish(); 

    } 
}