바이트(byte)로 된 파일 또는 바이트 배열 수정하는방법에 대해
작업을 하다가 바이트로 저장된 .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_nis의 length만큼 반복을 돌려서 기존 packet 배열에 수정할 데이터 배열을 넣어준다
위와같이 하면 원하는 길이만큼 원하는 데이터로 수정해 줄 수 있다.
소켓통신할 때 자주 사용될 것 같다