我不断收到“无效的流标头:EFBFBDEF”(Android,反序列化)

时间:2019-01-08 17:49:57

标签: java android stream deserialization ioexception

因此,我已经在仿真器上序列化了一个ArrayList并将文件复制粘贴到手机上(在/data/data/user/0/com.dondo.djee_buss/files中),并且在运行应用程序时模拟器可以正常工作,但是当我在手机上运行它时,它不会读取。它说,我的信息流已损坏。当我将序列化文件的内容粘贴到字符串中并且运行时,首先检查设备上是否存在具有该名称的文件,如果不是app应该创建一个文件并写入以前的内容,则会发生同样的事情文件中定义的字符串。

因此,有一个名为serLin(串行LINes)的ArrayList,其中保存了数据库中的数据。序列化过程进行得很好,但是如果我想从模拟器上的文件(linije.txt)中读取,则可以正常工作。然后,我决定在手机上对其进行测试。我建立了一个.apk文件,将其安装在手机上,我注意到的第一件事是缺少应包含序列化对象的文件。它存在于模拟器中,但是没有与.apk一起安装(这也是一个问题,如果有人知道如何同时安装文件和应用程序,那会很好),当我尝试运行它时,我得到FileNotFoundException作为回报。我当时想解决一个问题,并想将文件从我的PC(模拟器所在的地方)手动传输到手机,并确定FileNotFoundException已经消失了,取而代之的是IOException。因此,我尝试将'linije.txt'中的内容复制到一个字符串中,从该字符串中创建我自己的文件并反序列化对象,但是出现了相同的问题。

这是从文件读取的代码

FileInputStream fos = null;
    try {
        fos =openFileInput("linije.txt");
        ObjectInputStream oos = new ObjectInputStream(fos); //Line 166
        serLin = (List<Linija>) oos.readObject();
    } catch (FileNotFoundException e) {
        System.out.println("noFileM8");
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("IO's wrong");
    } catch (ClassNotFoundException e) {
        System.out.println("Where's the class?");
    }

(现在已删除)用于写入文件的代码

queue = Volley.newRequestQueue(this);
    JsonArrayRequest getRequest = new JsonArrayRequest(Request.Method.GET, "http://192.168.100.11:9090/linija/findAll", null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {

            try {
                serLin = map.readValue(response.toString(), new TypeReference<List<Linija>>() {
                });
                FileOutputStream sof = openFileOutput("linije.txt",MODE_PRIVATE);
                ObjectOutputStream soo = new ObjectOutputStream(sof);
                soo.writeObject(serLin);
                Log.d("Mudja", "onResponse: ");

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }, null);
    queue.add(getRequest);

这是打印出来的错误(此后不久,出现NullPointerException,因为我正在使用serLin.get,而serLin为null,因为我无法从文件读取)。

W/System.err: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
    at com.dondo.djee_buss.buslines.Linija44.onCreate(Linija44.java:166)
    at android.app.Activity.performCreate(Activity.java:7383)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3250)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3405)
    at android.app.ActivityThread.-wrap12(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1994)
    at android.os.Handler.dispatchMessage(Handler.java:108)
    at android.os.Looper.loop(Looper.java:166)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7523)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
I/System.out: IO's wrong

0 个答案:

没有答案