黑马程序员技术交流社区

标题: io流的问题 [打印本页]

作者: 魏亮    时间: 2012-10-21 09:29
标题: io流的问题
本帖最后由 魏亮 于 2012-10-23 10:46 编辑
  1. import java.io.*;
  2. class ObjectStream
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 writeUTF();

  7.         }
  8.         public static void writeUTF() throws Exception
  9.         {
  10.                 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ObjectUTF.txt"));
  11.                 oos.writeUTF("三防旅馆");
  12.                 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("ObjectUTF.txt"));
  13.                 String line = ois.readUTF();
  14.                 System.out.println(line);
  15.                
  16.         }
  17. }
复制代码
编译没有错误,一执行就会报边的异常,我这个用wirteUFT()写,用readUTF读,应该没什么问题呀??问题出在哪,请指教


360截图-61771515.jpg (25.98 KB, 下载次数: 66)

360截图-61771515.jpg

作者: 刘伟平    时间: 2012-10-21 10:11
本帖最后由 刘伟平 于 2012-10-21 10:14 编辑

flush()
          刷新该流的缓冲。
  1. import java.io.*;
  2. class Test
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 writeUTF();

  7.         }
  8.         public static void writeUTF() throws Exception
  9.         {
  10.                 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ObjectUTF.txt"));
  11.                 oos.writeUTF("三防旅馆");
  12.                 oos.flush();//加上这一句!!!只有这样,上面的数据才会写入文件,否则留在流的缓冲中
  13.                 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("ObjectUTF.txt"));
  14.                 String line = ois.readUTF();
  15.                 System.out.println(line);
  16.                
  17.         }
  18. }
复制代码

作者: 王自强    时间: 2012-10-21 10:22
  1. import java.io.*;
  2. class ObjectStream
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 writeUTF();

  7.         }
  8.         public static void writeUTF() throws Exception
  9.         {
  10.                 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ObjectUTF.txt"));
  11.                 oos.writeUTF("三防旅馆");
  12.                 oos.close();//你的写入流没有关
  13.                
  14.                 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("ObjectUTF.txt"));               
  15.                 String line = ois.readUTF();//所以你的读取流就读取到了 另外一个流(上面写入流)的末尾,发生EOFException异常!
  16.                 //正常情况下,写入流关闭后即oos.close(),你的读取流ois应该读取的是一个文件对象即ObjectUTF.txt,而不是一个流对象
  17.                 System.out.println(line);
  18.                 ois.close();
  19.                 /*EOFException这个异常,就是读取到流的末尾的异常,以后碰见,看看自己的写入流关了没有!养成好习惯啊!
  20.                  * */
  21.         }
  22. }
复制代码

作者: ssx0101    时间: 2012-10-21 11:45
要养成资源打开后一定要关闭的习惯
作者: 黑马杨锦喜    时间: 2012-10-21 15:16
Exception in thread "main" java.io.EOFException中,
EOFException指文件结尾了还继续读文件,就导致这个错误抛出。本来EOF的数值就是-1,但是是一种用于错误标识的记号。
因此
oos.writeUTF("三防旅馆");
oos.flush();//或者oos.close(); 刷新缓冲区或者关闭资源文件,则上面的数据才会写入文件,否则留在流的缓冲中

最后写入流之后也需加上
ois.close();
作者: 黑马杨锦喜    时间: 2012-10-21 15:17
Exception in thread "main" java.io.EOFException中,
EOFException指文件结尾了还继续读文件,就导致这个错误抛出。本来EOF的数值就是-1,但是是一种用于错误标识的记号。
因此
oos.writeUTF("三防旅馆");
oos.flush();//或者oos.close(); 刷新缓冲区或者关闭资源文件,则上面的数据才会写入文件,否则留在流的缓冲中

最后写入流之后也需加上
ois.close();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2