【问题标题】:Reading File from ArrayList从 ArrayList 读取文件
【发布时间】:2013-11-29 20:15:39
【问题描述】:

所以我有一个程序正在尝试读取文件以填充 ArrayList,但是当我运行该程序时不断收到此错误:

java.io.StreamCorruptedException: invalid stream header: 69652E77

代码:

File saveList = new File("PlayerDatabase.dat");

if(saveList.exists())
{
    FileInputStream FileStream = new FileInputStream(saveList);
    ObjectInputStream ObjStream = new ObjectInputStream(FileStream);

    list = (List<Player>)ObjStream.readObject();
    ObjStream.close();
}

【问题讨论】:

  • 您的文件不存储 ArrayList 对象。它可能存储一系列字符串。
  • ObjStream.readObject();不返回 List。编辑:我看到 Eliott Frisch 也有同样的答案

标签: java arraylist fill file-handling


【解决方案1】:

当您构造 ObjectInputStream 时,构造函数使用 readStreamHeader() 从流中读取前两个字节,期望它们是对象流中应该存在的魔法值。

protected void readStreamHeader()
        throws IOException, StreamCorruptedException
    {
        short s0 = bin.readShort();
        short s1 = bin.readShort();
        if (s0 != STREAM_MAGIC || s1 != STREAM_VERSION) {
            throw new StreamCorruptedException(
                String.format("invalid stream header: %04X%04X", s0, s1));
        }
    }

因此,如果它没有找到它们中的任何一个,它就会抛出StreamCorruptedException,这从上面的源代码中可以看出。确保文件以正确的格式写入。

【讨论】:

  • 我有一个问题,最近我正在通过 Swing 开发聊天应用程序。当我通过 java 连接到套接字 IP 和 pOrts 时,它可以工作,但是当我执行 telnet 时,它在 line short s0 = bin.readShort(); 中等待它等到有人没有在控制台中输入任何内容,因此它不允许我的其他用户登录,因为它处于等待状态。有没有办法停止 Telnet 呼叫?
【解决方案2】:

文件似乎没有以正确的格式序列化,所以在反序列化时会抛出 StreamCorruptedException。

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多