>Java >java지도 시간 >Java에서 기존 ObjectOutputStream에 추가할 수 있나요?

Java에서 기존 ObjectOutputStream에 추가할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-16 20:19:17147검색

Can You Append to Existing ObjectOutputStreams in Java?

기존 객체 스트림에 추가

ObjectOutputStream에 추가하는 것이 가능한지 의문이 생깁니다. 읽는 동안 객체 목록을 추가하려는 시도가 간헐적으로 실패하여 java.io.StreamCorruptedException이 발생합니다.

일반적인 사용법은 다음과 같습니다.

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();

그 후 읽는 동안:

FileInputStream fis = new FileInputStream
        ( preferences.getAppDataLocation() + "history");
ObjectInputStream in = new ObjectInputStream(fis);    

try{
    while(true)
        history.add((Stuff) in.readObject());
}catch( Exception e ) { 
    System.out.println( e.toString() );
}

ObjectOutputStream을 하위 클래스로 분류하고 writeStreamHeader 메서드를 재정의하면 다음을 제공합니다. 해결 방법:

public class AppendingObjectOutputStream extends ObjectOutputStream {

  public AppendingObjectOutputStream(OutputStream out) throws IOException {
    super(out);
  }

  @Override
  protected void writeStreamHeader() throws IOException {
    // do not write a header, but reset:
    // this line added after another question
    // showed a problem with the original
    reset();
  }

}

기록 파일이 있는 경우 추가 가능한 스트림을 인스턴스화하고(헤더 없이 추가), 존재하지 않는 경우 원본 스트림을 인스턴스화합니다(헤더를 사용하여 생성).

위 내용은 Java에서 기존 ObjectOutputStream에 추가할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.