A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏亮 中级黑马   /  2012-10-21 09:29  /  2630 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 魏亮 于 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, 下载次数: 65)

360截图-61771515.jpg

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
本帖最后由 刘伟平 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
要养成资源打开后一定要关闭的习惯
回复 使用道具 举报
Exception in thread "main" java.io.EOFException中,
EOFException指文件结尾了还继续读文件,就导致这个错误抛出。本来EOF的数值就是-1,但是是一种用于错误标识的记号。
因此
oos.writeUTF("三防旅馆");
oos.flush();//或者oos.close(); 刷新缓冲区或者关闭资源文件,则上面的数据才会写入文件,否则留在流的缓冲中

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

最后写入流之后也需加上
ois.close();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马