2017-01-30 6 views
-1

달성 할 내용 : ObjectOutputstreamwriteObject() 메서드를 사용하여 Integer 개체를 파일에 저장할 때 이전 Integer 개체를 덮어 쓰고 새 개체로 대체하려고합니다. 그러나 새로운 Integer 객체를 넣을 때마다 스트림을 닫고 다시 열지 않으려합니다. 난 그냥 새로운 가치로 그것을 업데이 트하고 싶습니다.ObjectOutputstream 닫는 스트림을 사용하지 않고 이전 개체 덮어 쓰기

내가 생각해 낸 해결책은 나에게 효과가 없었습니다. 여기에 코드입니다 : 내가 이것을 읽을 때

ObjectOutputStream stream1 = new ObjectOutputStream(new FileOutputStream(new File("ClientBase"), false)); 

stream1.writeObject(new Integer(2)); 

stream1.flush(); 
stream1.reset(); 

stream1.writeObject(new Integer(9)); 
stream1.close(); 

, 내가 가진 두 개의 정수 대신 내가 이런 식으로 넣어 경우 값 2

로 정수로 대체 값 9 정수의 객체, 그것을 작동합니다.

ObjectOutputStream stream1 = new ObjectOutputStream(new FileOutputStream(new File("ClientBase"), false)); 

stream1.writeObject(new Integer(2)); 
stream1.close();  

stream1 = new ObjectOutputStream(new FileOutputStream(newFile("ClientBase"), false)); 

stream1.writeObject(new Integer(9)); 
stream1.close(); 

내 질문 : 내가 잘못된 방법으로 reset() 방법을 사용하고 폐쇄/개방 스트림없이 덮어 쓰기를 달성하기 위해 다른 방법이 있습니까?

+0

그것은 스트림이 아닌 랜덤 액세스 것입니다. 스트림에 두 개의 객체를 쓰면 두 개의 객체를 스트림에서 읽습니다. 귀하의 질문에 이해가되지 않습니다. – EJP

+0

유일한 방법은 스트림을 닫고 다시 여는 것입니다. –

+0

스트림뿐 아니라 * 파일 * 게시하기 전에 Javadoc과상의하는 것이 좋습니다. 어떤 식 으로든 당신의 가정을 뒷받침하는 것은 없습니다. – EJP

답변

-1

이것은 내가 시도한 것입니다.

그러나 ...이 코드는 안전 확실하지 않다 참고 :

public static void main(String[] args) { 
    try (FileOutputStream fos = new FileOutputStream("objects.file"); 
      ObjectOutputStream os = new ObjectOutputStream(fos)) { 
     long position = fos.getChannel().position(); 
     os.writeObject(new Integer(2)); 
     os.flush(); 
     os.reset(); // added line 
     fos.getChannel().position(position); 
     os.writeObject(new Integer(9)); 
     os.flush(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

이것은 * 코딩 된 것입니다. 너 시도하지 않았어. 그것은 작동하지 않습니다. 결과 파일은'ObjectInputStream'에 제공 될 때'StreamCorruptedException'을 던집니다. – EJP

+0

사실, 당신 말이 맞습니다. 'os.reset();을 추가했습니다. – SlumpA

+0

제 의견으로는 이것을 사용하지 말아야합니다. 나는 새로운 ObjectOutputStream을 닫고 사용하는 것이 더 안전하다고 생각한다. 그러나이 경우에도 파일의 나머지 부분이 손상 될 수 있습니다. – SlumpA