gpt4 book ai didi

java - BufferedOutputStream 未写入 standardIO

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:16 25 4
gpt4 key购买 nike

我正在尝试使用 Robert Sedgwick 在他的算法 4E 教科书中提供的 BinaryStdOut.java 类。该类的代码可以在他的网站上免费获得,但为了便于引用,我将在此处显示它的相关片段。

在上面提到的类中,声明了一个BufferedOutputStream,如下

    private static BufferedOutputStream out = new BufferedOutputStream(System.out);

如果我的理解是正确的,这应该允许 out.write() 本质上打印到标准输出,就像我使用 System.out.print() 一样。

为了测试这一点,我构建了一个程序,其主要功能如下

    public static void main(String[] args) {
BinaryStdOut.write(1);
}

这会将整数 1 传递给 BinaryStdOut 的 write() 方法,如下所示

    public static void write(int x) {
writeByte((x >>> 24) & 0xff);
writeByte((x >>> 16) & 0xff);
writeByte((x >>> 8) & 0xff);
writeByte((x >>> 0) & 0xff);
}

writeByte()代码是:

private static void writeByte(int x) {
assert x >= 0 && x < 256;

// optimized if byte-aligned
if (N == 0) {
try { out.write(x); }
catch (IOException e) { e.printStackTrace(); }
return;
}

// otherwise write one bit at a time
for (int i = 0; i < 8; i++) {
boolean bit = ((x >>> (8 - i - 1)) & 1) == 1;
writeBit(bit);
}
}

现在我的问题是测试代码似乎没有做任何事情。它编译并成功运行,但我的终端中没有打印任何内容,就像我使用相同的整数执行 System.out.print() 一样。

为了查看问题是否出在 BinaryStdOut 类上,我将 BufferedOutputStream 声明直接复制到主程序中,然后尝试直接写入该流,结果相同。

使用 BufferedOutputStream.write() 时我是否遗漏了什么?

编辑:我的测试程序的主要功能当前如下所示:

public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedOutputStream out = new BufferedOutputStream(System.out);
try {out.write(16);
out.flush();
out.close();}
catch(IOException e){
System.out.println("error");
}
}

最佳答案

写入缓冲区后需要刷新缓冲区:

// optimized if byte-aligned
if (N == 0) {
try {
out.write(x);
out.flush();
}
catch (IOException e) { e.printStackTrace(); }
return;
}

您的测试程序似乎没有打印任何内容的原因是您正在打印 DLE ,这是一个控制字符,不会出现在标准输出中。

关于java - BufferedOutputStream 未写入 standardIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20209391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com