2010-03-15 3 views
1

일부 웹 사이트에서 공유 할 때 제대로 작동하려면 헤더 정보를 JPEG 파일에 추가해야합니다. 16 진수 파기를 통해 올바른 정보를 추적했습니다. ,하지만 지금은 파일에 넣으려고 노력 중입니다. 나는 파일이 어디로 가야 하는지를 안다. 얼마나 오래 있는지 알고있다. 문제는 RandomAccessFile이 파일의 기존 데이터를 덮어 쓰고 FileOutputStream이 데이터를 끝에 추가한다는 것이다. 나는 둘 중 하나를 원하지 않는다. 세 번째 바이트부터 시작하는 데이터를 삽입하고 싶다.자바를 사용하여 JPEG 파일에 16 진수 헤더 정보 추가

내 예제 코드 :

File fileToChange = new File("someimage.jpg"); 

byte[] i = new byte[2]; 
i[0] = (byte)Integer.decode("0xcc"); 
i[1] = (byte)Integer.decode("0xcc"); 

RandomAccessFile f = 
    new RandomAccessFile(new File("videothing.jpg"), "rw"); 
long aPositionWhereIWantToGo = 2; 
f.seek(aPositionWhereIWantToGo); // this basically reads n bytes in the file 
f.write((byte[])i); 
f.close(); 

그래서이 난 그냥 파일

답변

0

OutputSteam과 InputStream을 함께 사용해야합니다. InputStream을 사용하여 파일을 읽고 원본 파일에서 처음 2 바이트를 씁니다. 16 진수 내용을 삽입 한 다음 나머지 입력 스트림을 읽고 OutputSteam에 씁니다.

방법이 독서에 사용되는 :

public void write(byte b[], int off, int len) 
:

public int read(byte b[], int off, int len) 

방법은 서면에 사용되는

3

재 작성에 데이터를 삽입 할 수있는 방법을 찾을 수 없습니다, 그것은 덮어 쓰기 때문에 작동하지 않습니다, 그리고 삽입하지 않습니다 원하는 위치에 데이터를 삽입하는 파일의 사본. 또는 예를 들어 HTTP 응답을 전송하는 동안 즉석에서 수행하려는 경우 데이터를 주입하는 OutputStream을 작성하십시오.