【问题标题】:EOFException when reading file from storage (cn1)从存储读取文件时出现 EOFException (cn1)
【发布时间】:2016-07-07 11:53:27
【问题描述】:

我已经创建了一个可外部化的对象 - 用户。除非我退出应用程序并重新打开它,否则它在从存储中写入和读取它时工作正常。那么就会出现这个错误:

java.io.EOFException 在 java.io.DataInputStream.readFully(DataInputStream.java:197) 在 java.io.DataInputStream.readUTF(DataInputStream.java:609) 在 java.io.DataInputStream.readUTF(DataInputStream.java:564) 在 com.codename1.io.Util.readUTF(Util.java:962)

我在stateMachine中注册了如下类:

@Override
    protected void initVars(Resources res) {
        Util.register("User", User.class);
}

这是课程:

package userclasses;

import com.codename1.io.Externalizable;
import com.codename1.io.Util;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Date;

/**
 *
 * 
 */
public class User implements Externalizable {

    private static final int VERSION = 1;

    public int userID;
    public String username;
    public String password;
    public String firstname;
    public String surname;
    public String email;
    public Date registerDate;
    public boolean paidUser;
    public double runStep;
    public double walkStep;



    public User(){
    }

    @Override
    public int getVersion() {
        return VERSION;

    }

    @Override
    public void externalize(DataOutputStream out) throws IOException {
        out.write(userID);
        Util.writeUTF(username, out);
        Util.writeUTF(password, out);
        Util.writeUTF(firstname, out);
        Util.writeUTF(surname, out);
        Util.writeUTF(email, out);
        out.writeLong(registerDate.getTime());
        out.writeBoolean(paidUser);
        out.writeDouble(runStep);
        out.writeDouble(walkStep);

    }

    @Override
    public void internalize(int version, DataInputStream in) throws      IOException {
        userID = in.readInt();
        username = Util.readUTF(in);
        password = Util.readUTF(in);
        firstname = Util.readUTF(in);
        surname = Util.readUTF(in);
        email = Util.readUTF(in);
        registerDate = new Date(in.readLong());
        paidUser = in.readBoolean();
        runStep = in.readDouble();
        walkStep = in.readDouble();

    }

    @Override
    public String getObjectId() {
        return "User";
    }    
}

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    替换:

    out.write(userID);
    

    与:

    out.writeInt(userID);
    

    默认的写入方法相当于writeByte

    【讨论】:

    • 我的荣幸。仅供参考,当答案正确时,您需要使用答案旁边的复选标记接受它。对于好的答案,赞成也很有礼貌。请注意,您在接受答案时也会获得额外积分,这有助于您访问 stackoverflow 中的更多功能并改善网站体验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多