前言:我是一个完整的Java noob ...我昨天写了Hello World。怜悯我的自我。
我不确定如何从标准输入或输出读取到Java中的标准输出。我知道有些东西像Scanners和System.out.println,但这似乎并不直接适用于我正在尝试做的事情。
特别是,我正在尝试在标准输入上使用GZip并将压缩结果输出到标准输出。我看到有一个GZipOutputStream class我当然想要使用。但是,如何初始化输出流以指向std输出?此外,我如何才能从标准输入读取?
我怎样才能做到这一点?如何压缩标准输入并将结果输出到标准输出?
(这是我想要完成的图表:标准输入 - > GZIP(通过我的Java程序) - >标准输出(标准输入的压缩版本)
答案 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();
}
}