在Java中从标准输入到标准输出GZipping

时间:2011-10-25 19:50:28

标签: java io gzip stdout stdin

前言:我是一个完整的Java noob ...我昨天写了Hello World。怜悯我的自我。

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

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

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

(这是我想要完成的图表:标准输入 - > GZIP(通过我的Java程序) - >标准输出(标准输入的压缩版本)

2 个答案:

答案 0 :(得分: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中的流有一个陡峭的学习曲线,所以我建议在线阅读任何教程。

我会把它留作练习来计算输出。

- 免责声明:尚未尝试过代码

答案 1 :(得分: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();

    }
}