마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

파일 입출력 관련 입니다.

0 추천

안녕하세요 지금 ObjectOutputStream을 사용해서 클래스 객체를 파일로 저장하는 작업을 하고 있습니다.

지금 문제가 같은 소스를 컴퓨터로 저장하면 저장이 잘되고 , 용량이 2KB 가 됩니다. 근데 핸드폰으로 같은 클래스 객체를 같은 소스로 실행 하면 1.33kb 가 되고 , 로드 시 EOFError가 발생 합니다 (exception error) 그리고 , 이상한점이 하나 더 있는데 핸드폰에서는 파일이 바로 생성되지 않고 핸드폰 연결을 끊었다가 다시 컴퓨터와 연결하면 그때 파일이 생성되 있습니다. 1.33kB로... 무엇이 문제 일까요?

public void SaveUserData()
    {
        
        try {
            fos = new FileOutputStream(path);
            oos = new ObjectOutputStream(fos);
        } catch (Exception e1) {
            // TODO 자동 생성된 catch 블록
            e1.printStackTrace();
        }
        
        int ret = 0;
        try {
            nvUserDataT as  = new nvUserDataT();
            as.SETUP.Unit.Speed = 2;
            
            oos.writeObject(as);
                    } catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
        }
        finally {
            if( fos != null) try{fos.close();}catch(IOException e){}
            if( oos != null) try{oos.close();}catch(IOException e){}
            
        }
        
    }

좋은 하루 되세요 ^^

익명사용자 님이 2016년 1월 15일 질문

1개의 답변

0 추천
oos를 닫기 전에 oos.flush()를 호출해 보세요

위의 소스에서는 writeObject문 바로 아래요.

 

그리고 살짝 이상한 부분은 finally 문에서 fos를 닫고, oos를 닫도록 되어 있는데 순서가 조금 걸리네요. 이상이 있을지 없을지 모르나, fos를 바탕으로 oos를 만들었기 때문에 oos를 닫고, fos를 받는 게 순서상 맞을 것 같습니다. 실제로 영향이 있는지 없는지는 ObejctOutputStream의 close 메소드를 보면 되겠지요
cc1232 (35,280 포인트) 님이 2016년 1월 15일 답변
답변 감사합니다 flush를 호출하고 oos,fos 순으로 닫았는데도 같은 에러가 발생하네요 ㅠㅠ..
...