펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


작업을 하다가 바이트로 저장된 .dat파일을 수정할 일이 생겼다.


아예 파일을 다시 생성해버릴까 하다가 멘탈을 다잡고 생각해 보니 생각보다 간단한문제였다.


먼저 파일을 열어야 하는데


static public byte [] openUploadPacket(Context ctx, String name) {

String filename = name + "_packet.dat" ;

byte [] list = null ;

try {

File cellFile = ctx.getFileStreamPath(filename);

ObjectInputStream is = new ObjectInputStream(new FileInputStream(

cellFile));

list = (byte []) is.readObject();

is.close();

return list;

} catch (Exception e) {

log.err("openUploadPacket = " + e) ;

return null;

}

}


이렇게하면 바이트배열에 파일의 내용이 전부 들어간다.


( 파일을 저장하는것은 InputStream 대신 OutputStream을 사용해서 write해주면 된다. )



나는 오픈한 파일의 164 ~ 175 번 값을 바꿔줘야 했다.



byte [] packet = Common.openUploadPacket(mContext, workNum) ;

byte [] editByte = et_nis.getText().toString().getBytes();


for (int i = 0; i < editeByte.length; i++) {

packet [164 + i] = editeByte[i];

}


먼저 바이트배열 packet에 파일 읽어온다

그럼 파일의 length만큼 배열크기가 할당되고 데이터가 들어가고,


내가 수정할 데이터가 들어갈 editByte도 하나 만들어줬다.


et_nis라는 EditView에 입력한 값이 저기에 들어가게 될텐데,


et_nis에 어떤 데이터형이 들어갈 지 모르기때문에 일단 스트링으로 받은 다음, getBytes()를 이용해

바이트형식으로 배열에 넣어줬다.


그리고 164번부터 et_nislength만큼 반복을 돌려서 기존 packet 배열에 수정할 데이터 배열을 넣어준다


위와같이 하면 원하는 길이만큼 원하는 데이터로 수정해 줄 수 있다.


소켓통신할 때 자주 사용될 것 같다