作业帮 > 综合 > 作业

为什么是两个问号?import java.io.*;public class ReaderWriter{public s

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/15 20:22:01
为什么是两个问号?
import java.io.*;
public class ReaderWriter
{
public static void main(String[] args) throws Exception
{
File f=new File("c:\\raw.txt");
FileOutputStream fos=new FileOutputStream(f);
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write('中');
osw.write('华');
osw.close(); //若不关闭输出流,后面将输出两个问号,是为什么?
FileInputStream fis=new FileInputStream(f);
InputStreamReader isr=new InputStreamReader(fis);
System.out.println((char)isr.read());
System.out.println((char)isr.read());
isr.close();
}
}
此代码可以正常执行,但是当把有注释的那行删掉,那么文件raw.txt中不会出现“中华”两个字,难道对文件的写入是在输出流关闭的时候执行的?请各位大侠帮忙分析下?
把有注释的那行删掉的话要加一个osw.flush();来刷新当前流,因为OutputStreamWriter不会自动刷新.
建议在osw.close();之前也加一个osw.flush();
多看看API吧.下面是API上的话,不知道对你是否有用.
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器.在写入底层输出流之前,得到的这些字节将在缓冲区中累积.可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大.注意,传递给 write() 方法的字符没有缓冲.
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器.例如:
Writer out
= new BufferedWriter(new OutputStreamWriter(System.out));