-1

好的,伙计们,我已经在这方面工作了很长时间,我有一个电影库存

    Iroman 3
    Momento 2
    LifeofPi 2
    Superman 2
    The Crazies 1

得到一个异常:java.io.StreamCorruptedException:无效的流头:49726F6E(意味着我输入文件的第一部分。)

我明白为什么它不会让我加载:ObjectInputStream 反序列化以前使用 ObjectOutputStream 编写的原始数据和对象。“inventory.dat 可能不是以前使用 ObjectOutputStream 编写的序列化对象文件。您可能想改用 InputStreamReader

我尝试使用 InputStreamreader,但显然我将使用的对象不适用于这种类型的输入法

--------库存是数据项的排序列表(ADT排序列表实现为数据项的链表),按每个项目所代表的标题排序。

-------- 每个库存项目包含一个标题、一个有值、一个想要值和一个客户列表(等待列表)

 public static void main(String[] args)
{
    //
    //  Loading from the inventory.dat
    //
    try {
        FileInputStream fis = new 
                            FileInputStream("inventory.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object o = ois.readObject();
        inventory = (SortedList)o;
    }
    catch (FileNotFoundException fnfe) {
        inventory = new SortedList();
    }
    catch (Exception e) {
        System.out.println(e);
    }
4

2 回答 2

2

你说:

我尝试使用 InputStreamreader,但显然我将使用的对象不适用于这种类型的输入法

不,您的问题没有任何明显迹象表明它不适用于这种类型的输入法。在您的代码正常工作之前不要假设任何事情,也不要假设您认为显而易见的任何事情对我们来说是显而易见的。我看到的唯一显而易见的事情是,如果您的文件包含文本数据,则不应使用 ObjectInputStream,因为它用于序列化数据,而不是文本,而应使用由 BufferedReader 包装的 InputStreamReader。要么使用扫描仪,要么将扫描仪与您的文件一起使用。

您读入数据,拆分数据,然后使用其构造函数为读入的每一行数据创建清单对象。

伪代码:

Create File from your file path String
Create Scanner object, fileScanner with the File
while the fileScanner has a nextLine to read
  String line gets fileScanner's nextLine.
  Create a line Scanner object, lineScanner, with line of text.
  name String gets lineScanner's next token
  value int gets lineScanner's next int.
  close lineScanner
  Create your object of interest with the name and value values
  put it in your collection
end while loop
close fileScanner
于 2013-09-25T02:34:37.033 回答
0

也许在文件的最后一个花瓶对象。你应该调用flush()并关闭你的流。这将导致丢失数据

于 2013-09-25T02:45:06.933 回答