Java char[]上的流编写器不工作
我有以下代码,但是当我检查输出文件时,char[]cc似乎没有被写入。有人能告诉我怎么了吗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
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来违反协议。