2015-09-16 17 views
1

我有一个java中的示例程序,它在eclipse中完全正常运行,但当我尝试在使用java的linux中编译它时出现错误。请帮忙。我附上了错误跟踪也代码结束后:java中的平台相关错误(在eclipse窗口中运行,但在linux中发生错误)

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:无效的流头:EFBFBDEF

回答

1

因为字符集的启示。在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"); 
     } 

    } 

如果更改字符集,它的工作正常。

相关问题