2013-10-22 2 views
0

내 Linux 서버에서 jar 파일을 실행하려고합니다. 내 Windows 바탕 화면에서 그냥 벌금 명령을 사용하여 jar 파일을 실행할 수 있습니다java.io.StreamCorruptedException : 형식 코드가 잘못되었습니다 : 9D

java.io.StreamCorruptedException: invalid type code: 9D 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1374) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1988) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1912) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1795) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369) 
    at com.test.test.Main.main(Main.java:41) 

내 코드는 다음과 같습니다 :

그러나 내 리눅스 서버에서 실행하면

java -Xss1000m -XX:-UseGCOverheadLimit -Xmx5048m -jar test.jar 

을 나는 다음과 같은 오류가 발생합니다

public class Main { 
public static void main(String[] args) throws Exception { 
    String fromTextFile = ""; 
    String path = ""; 

    if (!SystemUtils.IS_OS_WINDOWS) 
     path = "/var/www/tomcat/fetch/"; 

    fromTextFile = path + "resources/ac_geonames_country_all.txt"; 

    AhoCorasick tree = new AhoCorasick(); 

    ObjectInputStream ois; 
    try { 
     ois = new ObjectInputStream(new FileInputStream(fromTextFile)); 
     tree = (AhoCorasick) ois.readObject(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 
+0

직렬화 된 개체는 텍스트 파일에 저장되지 않습니다. 그래서'txt'라는 이름으로 끝내지 마십시오. 그렇지 않으면 파일 전송 프로그램이 프로그램 옵션을 사용하여 텍스트 파일처럼 취급하지 않는지 확인하십시오. 전송 프로그램이 줄 바꿈 및 charset 인코딩 변환을 적용하면 파일을 휴지통에 버릴 가능성이 높습니다. – Holger

+0

나는 그것을 테스트했다. WinSCP는 자동 파일 전송으로 설정됩니다. 수동으로 ac_geonames_country_all.txt 파일에 대한 바이너리 모드로 전환했습니다. 파일 크기가 변경되었지만 오류는 그대로있었습니다. –

+0

어떻게 파일을 만들었으며 직렬화 할 개체의 정의는 무엇입니까? – EJP

답변

0

나는 그것을 작동시킬 수 있었다. 나는 리눅스 서버에서 직접 파일을 재생성했다. 이제 모든 것이 잘 작동합니다. 파일 전송 중에 문제가 발생합니다. 또는 Java는 Linux에서 파일을 다르게 직렬화합니다. 나는 단서가 없다.

@EJP 감사합니다. 그런 다음 파일 전송이 파일을 엉망으로 만듭니다.

+1

Java는 Linux에서 파일을 다르게 serialize하지 않습니다. – EJP

관련 문제