我使用DataOutputStream保存文件,当时练习用的,用object对象流没问题,但我还是想知道问题出在哪里。出现java.io.EOFException错误。但是数据可以在cmd中打印出来。这个class的作用就是保存对象,读取并打印到cmd。
=========================================import java.io.*;public class ObjectOutputTest
{
public static void main(String[] args) 
{
String s = "你好heipark";
int len = 10;
byte[] b = new byte[len];

len = 9;
while(len>=0) {
b[len] = (byte)len;
len --; } String [] arrayStr = {"我111","我222", "我333"}; try{
File f = new File("test2.txt");
FileOutputStream fos = new FileOutputStream(f);
DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(1000); 
for(int i=0; i < arrayStr.length; i++) {
dos.writeUTF(arrayStr[i]);
}

dos.flush();
dos.close();
fos.close(); FileInputStream fin = new FileInputStream(f);
DataInputStream din = new DataInputStream(fin);
String tmp = ""; System.out.println(din.readInt());
while(true) {
System.out.print("&");
tmp=din.readUTF();
if(tmp == null ) { break;} // 该处发生java.io.EOFException,不知道何故?
System.out.print("*"); System.out.println(tmp); }
din.close();
fin.close();
} catch(IOException e) { System.out.println(e.toString()); } }
}

解决方案 »

  1.   

    if (tmp.equals(null)) {
        break;
    }
      

  2.   

    中间这段循环改为while(din.available()>0) {
    System.out.print("&");
    tmp=din.readUTF();
    if(tmp == null ) { break;} // 该处发生java.io.EOFException,不知道何故?
    System.out.print("*");System.out.println(tmp);}
      

  3.   

    其实你是误导别人了
    if(tmp == null ) { break;} 这句是没有错误的tmp=din.readUTF();错误出现在这里
    因为din的字符串流为空了,虽然din还是对象
      

  4.   

    建议楼主去读一下 JDK 文档里关于 DataInputStream.readUTF() 的解释。它首先要读入两个字节,作为“预期的 UTF 字符串长度”,然后按照这个长度去读后续的字符。可按照楼主的程序,可能读出的“预期长度”是 1000。
      

  5.   

    另外,楼主在原程序中标注的抛 Exception 的行显然不对,应该是在上一行。