diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexFile.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexFile.java index 89a06e4a..e63609c0 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexFile.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexFile.java @@ -233,7 +233,7 @@ public class DexFile { } private static DexWriter outputAt(RandomAccessFile raf, int filePosition) throws IOException { - return new DexWriter(new RandomAccessFileOutputStream(raf), filePosition); + return new DexWriter(new RandomAccessFileOutputStream(raf, filePosition), filePosition); } public static void writeTo(@Nonnull String path, @Nonnull org.jf.dexlib2.iface.DexFile input) throws IOException { diff --git a/util/src/main/java/org/jf/util/RandomAccessFileOutputStream.java b/util/src/main/java/org/jf/util/RandomAccessFileOutputStream.java index cabe6768..b804d265 100644 --- a/util/src/main/java/org/jf/util/RandomAccessFileOutputStream.java +++ b/util/src/main/java/org/jf/util/RandomAccessFileOutputStream.java @@ -37,21 +37,29 @@ import java.io.OutputStream; import java.io.RandomAccessFile; public class RandomAccessFileOutputStream extends OutputStream { + private int filePosition; @Nonnull private final RandomAccessFile raf; - public RandomAccessFileOutputStream(@Nonnull RandomAccessFile raf) { + public RandomAccessFileOutputStream(@Nonnull RandomAccessFile raf, int startFilePosition) { + this.filePosition = startFilePosition; this.raf = raf; } @Override public void write(int b) throws IOException { + raf.seek(filePosition); + filePosition++; raf.write(b); } @Override public void write(byte[] b) throws IOException { + raf.seek(filePosition); + filePosition += b.length; raf.write(b); } @Override public void write(byte[] b, int off, int len) throws IOException { + raf.seek(filePosition); + filePosition += len; raf.write(b, off, len); } }