簡體   English   中英

java中的平台相關錯誤(在eclipse windows中運行但在linux中出現錯誤)

[英]Platform dependent error in java (Running in eclipse windows but gives error in linux)

我有一個 java 示例程序,它在 eclipse 中運行得很好,但是當我嘗試在 linux 中使用 java 編譯它時出現錯誤。 請幫忙。 我也在代碼結束后附加了錯誤跟蹤:

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.Arrays;

    public class Main {



        public String toStringMethod(TestObject test) {
            String serializedObject = "";
            try {
                ByteArrayOutputStream bo = new ByteArrayOutputStream();
                ObjectOutputStream so = new ObjectOutputStream(bo);
                so.writeObject(test);
                so.flush();
                serializedObject = bo.toString();
            } catch (Exception e) {
                System.out.println(e);
            }
            return serializedObject;

        }

        public TestObject toObjectMethod(String string) {
            String serializedObject = string;
            TestObject obj = null;
            try {
                byte b[] = serializedObject.getBytes(); 
                ByteArrayInputStream bi = new ByteArrayInputStream(b);
                ObjectInputStream si = new ObjectInputStream(bi);
                obj = (TestObject) si.readObject();
            } catch (Exception e) {
                System.out.println(e);
            }
            return obj;

        }

        public static void main(String[] args) {

            Main mn = new Main();

            TestObject object = new TestObject();

            object.setString(10);

            String str = mn.toStringMethod(object);

            TestObject newObject = mn.toObjectMethod(str);

            newObject.printHello();
        }



    }

    class TestObject implements Serializable{

        char chars[];
        String str;

        public String setString(int numberOfBytes) {

            numberOfBytes = numberOfBytes/2;

            chars = new char[numberOfBytes];
            Arrays.fill(chars, 'a');
            str = new String(chars);
            return str;
        }

        public String getString() {

            return str;
        }

        public void printHello() {
            System.out.println("hello tester");
        }

    }

錯誤跟蹤是:java.io.StreamCorruptedException: invalid stream header: EFBFBDEF

這是因為字符集。 在 Windows 中,默認字符集是 windows-1252。 但是 Linux 默認字符集是 UTF-8。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.util.Arrays;

        public class Main {



        public String toStringMethod(TestObject test) {
            String serializedObject = "";
            try {
                ByteArrayOutputStream bo = new ByteArrayOutputStream();
                ObjectOutputStream so = new ObjectOutputStream(bo);
                so.writeObject(test);
                so.flush();
                so.close();
                serializedObject = bo.toString("windows-1252");
                System.out.println(serializedObject);
            } catch (Exception e) {
                System.out.println(e);
            }
            return serializedObject;

        }

        public TestObject toObjectMethod(String string) {
            String serializedObject = string;
            TestObject obj = null;
            try {
                byte b[] = serializedObject.getBytes("windows-1252");
                ByteArrayInputStream bi = new ByteArrayInputStream(b);
                ObjectInputStream si = new ObjectInputStream(bi);
                obj = (TestObject) si.readObject();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return obj;

        }

        public static void main(String[] args) {

            Main mn = new Main();

            TestObject object = new TestObject();

            object.setString(10);

            String str = mn.toStringMethod(object);

            TestObject newObject = mn.toObjectMethod(str);

            newObject.printHello();
        }



    }

    class TestObject implements Serializable{

        char chars[];
        String str;

        public String setString(int numberOfBytes) {

            numberOfBytes = numberOfBytes/2;

            chars = new char[numberOfBytes];
            Arrays.fill(chars, 'a');
            str = new String(chars);
            return str;
        }

        public String getString() {

            return str;
        }

        public void printHello() {
            System.out.println("hello tester");
        }

    }

如果您更改字符集,則其工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM