.java.io.StreamCorruptedException: invalid type code: AC 해결 방법
문제 설명:
한 파일에 서열화된 대상을 쓸 때 파일의 끝에 서열화된 대상만 추가하려고 File OutputStream(파일 이름,true)을 사용하여 Object OutputStream 흐름 대상을 간접적으로 구축하여 외부에서 데이터를 읽을 때 첫 번째 운행할 때 틀리지 않고 두 번째에java를 보고합니다.io.StreamCorruptedException: invalid type code: AC 오류.
이유:
하나의 파일에는 하나의 파일의 머리와 파일체가 있다.File Output Stream (파일 이름,true) 을 여러 번 사용해서 만든 Object Output Stream 대상이 같은 파일에 데이터를 쓰기 때문에, 데이터가 있을 때마다 헤더가 쓸 대상 데이터를 먼저 쓰기 때문에, 읽을 때 이 파일체에 있는 헤더를 만나면 오류가 발생합니다.읽을 때streamcorrput 이상이 발생합니다.
해결 방법: 그래서 여기서 파일을 처음 쓰는 것인지 아닌지를 판단해야 한다. 만약에 머리에 쓰고 그렇지 않으면 쓰지 않는다.
코드 예:
1.MyObjectOutputStream.java 파일
1 import java.io.*;class MyObjectOutputStream extends ObjectOutputStream {
2 public MyObjectOutputStream() throws IOException {
3 super();
4 }
5 public MyObjectOutputStream(OutputStream out) throws IOException {
6 super(out);
7 }
8 @Override
protected void writeStreamHeader() throws IOException {
9 return;
10 }
11 }
2.ObjectSave.Java
1 import java.io.*;
2 import java.util.*;
3 public class ObjectSave {
4 /** * @param args
5 * * @throws IOException
6 * * @throws IOException
7 * @throws FileNotFoundException
8 * */
9 public static void main(String[] args) {
10 ObjectOutputStream out = null;
11 ObjectInputStream in = null;
12 List list = new ArrayList();
13 list.add(new User("admin", "admin", "123", 1));
14 list.add(new User("zhang", "zhang", "123", 0));
15 String path = "d://abc";
16 try { //
17 File file = new File(path);
18 FileOutputStream fos = new FileOutputStream(file, true);
19 if(file.length()<1){
20 out = new ObjectOutputStream(fos);
21 }else{
22 out = new MyObjectOutputStream(fos);
23 }
24 //out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path,true)));
25 //out.writeObject(Calendar.getInstance());
26 //
27 for (int i = 0; i < list.size(); i++) {
28 out.writeObject(list.get(i));
29 }
30 } catch (Exception ex) {
31 ex.printStackTrace();
32 } finally {
33 try {
34 out.close();
35 } catch (IOException e) {
36 e.printStackTrace();
37 }
38 } try {
39 in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));
40 //Calendar date = (Calendar) in.readObject();
41 //System.out.format("On %tA, %
42 while (true) {
43 User user = (User) in.readObject();
44 System.out.println(user.getName());
45 }
46 } catch (EOFException e) {
47
48 } catch (Exception ex) {
49 ex.printStackTrace();
50 } finally {
51 try {
52 in.close();
53 } catch (IOException e) {
54 e.printStackTrace(); }
55 }
56 }
57 }
58 }
59 }
60 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.