Java char[]上的流编写器不工作

Java char[]上的流编写器不工作,java,stream,writer,Java,Stream,Writer,我有以下代码,但是当我检查输出文件时,char[]cc似乎没有被写入。有人能告诉我怎么了吗 import java.io.*; class Test { public static void main(String[] args) { System.out.printf("start of main\n"); char[] cc = new char[300]; try { String s = "this is a test."; Syst

我有以下代码,但是当我检查输出文件时,char[]cc似乎没有被写入。有人能告诉我怎么了吗

import java.io.*;

class Test {
  public static void main(String[] args) {
    System.out.printf("start of main\n");
    char[] cc = new char[300];
    try {
      String s = "this is a test.";
      System.arraycopy(s.toCharArray(), 0, cc, 0, s.length());
      System.out.printf("cc = %s\n", new String(cc));
      String filename = "tst.data";
      DataOutputStream ostream = new DataOutputStream(new FileOutputStream(filename));
      OutputStreamWriter writer = new OutputStreamWriter(ostream);
      writer.write(cc, 0, 300);
      ostream.close();

      DataInputStream istream = new DataInputStream(new FileInputStream(filename));
      InputStreamReader reader = new InputStreamReader(istream);
      char[] newcc = new char[300];
      reader.read(newcc, 0, 300);
      istream.close();

      System.out.printf("newcc = %s\n", new String(newcc));
    } catch (Exception e) {
      System.out.printf("Exception - %s\n", e);
    }
  }
}

您需要关闭最外层的I/O包装器

替换

ostream.close();



与具体问题无关,在此上下文中,那些
DataOutputStream
DataInputStream
包装器是不必要的。移除它们。最后,您应该关闭
Finally
块中的流。另请参见此相关问题:

您需要关闭最外层的I/O包装器

替换

ostream.close();



与具体问题无关,在此上下文中,那些
DataOutputStream
DataInputStream
包装器是不必要的。移除它们。最后,您应该关闭
Finally
块中的流。另请参阅此相关问题:

写入程序仍然没有将缓冲区刷新到ostream。 您可以使用writer.flush(); 像这样

writer.write(cc, 0, 300);
writer.flush();

写入程序仍然没有将缓冲区刷新到ostream。 您可以使用writer.flush(); 像这样

writer.write(cc, 0, 300);
writer.flush();

当您不需要char[]时,使用char[]会使它变得更加复杂,至少在给定的代码中是这样。您可以通过使用string来完成上面的所有操作。当您不需要char[]时,使用char[]会使操作变得更加复杂,至少在给定的代码中是这样。您可以通过使用string来完成上述所有操作,但我真正想要的是在writer写出数组后使用ostream来writeInt。如果调用write.close,那么ostream如何在之后继续写入。当然writer不支持write(int)。如果关闭
ostream
,您将如何对其执行
writeInt()
?只需在调用
writer.flush()
之后和调用
writer.close()
之前执行此操作。顺便问一下,功能要求是什么?我忍不住有这样一种印象:你没有真正理解
DataInput/OutputStream
的目的和/或是把简单的事情复杂化了。但这不起作用。在调用writer.close()之前,我可以使用ostream编写(int),但当我试图读回它时,它会导致IOException。我理解这个问题。但我仍然不理解功能需求。我们可以继续拼凑出一个糟糕的解决方案,但这不是我的风格。你可能想问一个新问题,在这个问题上,你清楚地描述了功能需求,并询问如何最好地解决它,在这个问题上,你展示了失败的尝试。你不能通过绕过DataOutputStream来违反协议。但我真正想要的是在编写器写出数组后使用ostream来编写。如果调用write.close,那么ostream如何在之后继续写入。当然writer不支持write(int)。如果关闭
ostream
,您将如何对其执行
writeInt()
?只需在调用
writer.flush()
之后和调用
writer.close()
之前执行此操作。顺便问一下,功能要求是什么?我忍不住有这样一种印象:你没有真正理解
DataInput/OutputStream
的目的和/或是把简单的事情复杂化了。但这不起作用。在调用writer.close()之前,我可以使用ostream编写(int),但当我试图读回它时,它会导致IOException。我理解这个问题。但我仍然不理解功能需求。我们可以继续拼凑出一个糟糕的解决方案,但这不是我的风格。你可能想问一个新问题,在这个问题上,你清楚地描述了功能需求,并询问如何最好地解决它,在这个问题上,你展示了失败的尝试。你不能通过绕过DataOutputStream来违反协议。