From e0d3f22f16eb53734068cba3daeff99c940251e5 Mon Sep 17 00:00:00 2001 From: aliveoutside <53598473+aliveoutside@users.noreply.github.com> Date: Fri, 16 Feb 2024 06:32:53 +0300 Subject: [PATCH] improve demuxer performance use buffered io for input and output streams reuse single bytebuffer instead of creating it for every packet --- .../ru/vtosters/lite/music/converter/ts/MpegDemuxer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/music/converter/ts/MpegDemuxer.java b/app/src/main/java/ru/vtosters/lite/music/converter/ts/MpegDemuxer.java index 7746878be..f7302df06 100644 --- a/app/src/main/java/ru/vtosters/lite/music/converter/ts/MpegDemuxer.java +++ b/app/src/main/java/ru/vtosters/lite/music/converter/ts/MpegDemuxer.java @@ -4,6 +4,8 @@ import android.util.Log; import com.vk.dto.music.MusicTrack; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -17,10 +19,11 @@ public class MpegDemuxer { int desiredPid = 256; var buffer = new byte[packetSize]; + var packet = ByteBuffer.wrap(buffer).order(ByteOrder.BIG_ENDIAN); - try (var fis = new FileInputStream(in); var fos = new FileOutputStream(out)) { + try (var fis = new BufferedInputStream(new FileInputStream(in)); var fos = new BufferedOutputStream(new FileOutputStream(out))) { while (fis.read(buffer) != -1) { - var packet = ByteBuffer.wrap(buffer).order(ByteOrder.BIG_ENDIAN); + packet.clear(); int firstByte = packet.get() & 0xFF; int secondByte = packet.get() & 0xFF; @@ -65,7 +68,6 @@ public class MpegDemuxer { } fos.write(packet.array(), packet.position(), packetSize - packet.position()); - packet.clear(); } } }