ObjectInputStream 如何判断.dat文件结束啊??

解决方案 »

  1.   


    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;import com.kevinb.io.bean.User;public class ObjectOutputStreamModel {    private static void writeObjectFile(){
            String sourceFile = "src/com/kevinb/io/objectStream/userFile";
            File file = new File(sourceFile);
            try {
                FileOutputStream fiOutputStream = new FileOutputStream(file);
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(fiOutputStream);
                //开始准备插入对象
                User user1 = new User();
                user1.setUserId(1);
                user1.setUserName("Kevinb");
                user1.setPassword("ffffff");
                objectOutputStream.writeObject(user1);
                
                User user2 = new User();
                user2.setUserId(2);
                user2.setUserName("Jone");
                user2.setPassword("11");
                objectOutputStream.writeObject(user2);
                
                //写入结束标志方便读取(非常重要,如果不写入,在读取的时候无法定位读取结束);
                objectOutputStream.writeObject(null);
                //close outputStream
                objectOutputStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("对象写入成功!");
        }
        
        public static void main(String[] args) {
            writeObjectFile();
        }
    }
      

  2.   

    在读取文件时,肯定要处理异常,即当ObjectInputStream读取到文件末时,会抛出来异常,捕捉到异常,在catch之中放置break;就会跳出这个while语句,自然读取完毕!如下例:while(true)
    {
         try
         {
               message=reader.readObject();
         }
         catch(IOException e)
         {
              break;//这个时候程序跳出while循环,读取结束
         }
    }
      

  3.   

    这个以前还没有注意。。
    不过用ObjectOutputStream写入对象后,接着就可以用ObjectInputStream读出了,不需要判断是否到了文件的结尾啊
      

  4.   

    我已经写了null作为结束标志,我的目的是下次运行时,可以删除null,然后在.dat文件后追加object,再写null
      

  5.   

    try {
    in = new ObjectInputStream(new BufferedInputStream(
    new FileInputStream(save)));
    //vector.add((Manager) in.readObject());
    System.out.println(in.readObject());
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } finally {
    try {
    in.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    我问下我这么写为什么只能得到最后一个数据啊