java.io.StreamCorruptedException: invalid stream header: AC3F0005

103
08 октября 2021, 07:50

я сериализую объект KeyEvent, превращаю его в строку, а затем сохраняю это значение в бд Oracle, затем читаю строку из бд и пытаюсь десериализовать ее, чтобы снова превратить в объект, но получаю ошибку.

"java.io.StreamCorruptedException: invalid stream header: AC3F0005
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.(Unknown Source)
at app.Serializer.deserialize(MyStreamCorruptedException.java:63)"

Это происходит не на моей машине, поэтому продебажить, что происходит нет возможности, но есть подозрение, что какая-то проблема с кодировкой, на других машинах такой проблемы нет, создал простой пример кода, который точно повторяет, что происходит, кроме как записи в бд и чтения строки из нее

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
public class MyStreamCorruptedException extends JFrame {
    public static void main(String args[]) throws Exception {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextField nameTextField = new JTextField();
        frame.add(nameTextField, BorderLayout.NORTH);
        KeyListener keyListener = new KeyAdapter() {
            public void keyPressed(KeyEvent keyEvent) {
                String str = null;
                try {
                    str = serialize(keyEvent);
                } catch (IOException e) {
                    e.printStackTrace();
                }
           //здесь происходит запись
           //а потом чтение
                try {
                    Object dStr = deserialize(str);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        };
        nameTextField.addKeyListener(keyListener);

        frame.setSize(250, 100);
        frame.setVisible(true);
    }
    public static String serialize(Serializable obj) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(obj);
        oos.flush();
        oos.close();
        bos.close();
        return bos.toString();
    }
    public static Object deserialize(String str) throws ClassNotFoundException, IOException {
        Object obj = null;
        if (str != null && !str.isEmpty()) {
            ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
            ObjectInputStream ois = new ObjectInputStream(bis);
            obj = ois.readObject();
            ois.close();
            bis.close();
        }
        return obj;
    }
}

Может кто-нибудь знает, в какую сторону копать, из-за чего такое может произойти?

Answer 1

Проблема оказалась именно на машине в региональных стандартах на вкладке Формат была указана US при смене на Russia проблема решилась

READ ALSO
Расширенный алгоритм Евклида

Расширенный алгоритм Евклида

Доброго времени суток

105
Data Jpa - операции с двумя аргументами

Data Jpa - операции с двумя аргументами

Приложение на Spring Data JpaИмеется класс Meal

98
Ping-Pong на Java

Ping-Pong на Java

Доброго времени сутокПример из книги, символ в символ, но не работает, шарик не перемещается

78
Получение ANDROID_ID на всех версиях Android

Получение ANDROID_ID на всех версиях Android

Подскажите пожалуйста как в Android на всех версиях получать ANDROID_ID, чтобы для конкретного устройства он некогда не менялсяИ на другом устройстве...

110