【问题标题】:OutputStreamWriter write() [closed]OutputStreamWriter write() [关闭]
【发布时间】:2013-12-21 07:24:13
【问题描述】:

我写了一个小程序来跟踪输入流和输出流的方法回调。

import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class TracingOutputStream extends FilterOutputStream {
private String key;
private Writer log;

public TracingOutputStream(OutputStream sink, String key, OutputStream log) {
    super(sink);
    this.key = key;
    this.log = new OutputStreamWriter(log);
}

@Override
public void write(byte[] b) throws IOException {
    log.write(key + " write (byte [" + b.length + "])");
    log.write(114);
    super.write(b);
}

@Override
public void write(byte[] b, int off, int len) throws IOException {
    log.write(key + " write (byte [" + b.length + "]" + " ," + off + len + ")");
    super.write(b, off, len);
}

@Override
public void flush() throws IOException {
    log.write(key + "flush()");
    super.flush();
}

@Override
public void close() throws IOException {
    log.write(key + "close()");
    super.close();
}   

}

但是当我尝试运行主类 TracingOutputStreamMain 时,没有写入任何内容。谁能帮我解释一下

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

public class TracingOutputStreamMain {
    public static void main(String... args) throws IOException {
        try(ByteArrayOutputStream bytesOutput = new ByteArrayOutputStream();
        OutputStream fout = new FileOutputStream("log.txt");
        TracingOutputStream tracingOutput = new TracingOutputStream(bytesOutput, "ByteArray", fout);
            BufferedOutputStream bufferedOutput = new BufferedOutputStream(tracingOutput);
            TracingOutputStream tracingBufferedOutput = new TracingOutputStream(bufferedOutput, "Buffered", fout)) {
            for(String arg: args)
                tracingBufferedOutput.write(arg.getBytes());
        }
        //System.out.println(Arrays.toString(bytesOutput.toByteArray()));
    }
}

【问题讨论】:

  • 除了您发布的代码甚至无法编译之外?没有。
  • 我已经编译好了,但是什么也没发生。 log.write() 被调用,但它不能写出任何内容“log.txt”
  • 您的主要方法永远不会关闭或刷新任何流/写入器。
  • 在 java7 中,声明 try-with-resource 不需要任何关闭和刷新方法。它被称为 ARM - 自动资源管理。

标签: java outputstream


【解决方案1】:

TracingOutputStream 中使用的 OutputStreamWriter 永远不会关闭。关闭它,输出会突然出现在输出文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多