Android/소스코드

바이트(byte)로 된 파일 또는 바이트 배열 수정하는방법에 대해

덩치 2014. 3. 20. 15:15


작업을 하다가 바이트로 저장된 .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 배열에 수정할 데이터 배열을 넣어준다


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


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