From 459307ac2643926b5ec74699f5c3d94fdc822b1e Mon Sep 17 00:00:00 2001 From: REAndroid Date: Sat, 7 Jan 2023 09:12:04 -0500 Subject: [PATCH] create string pool reader --- .../lib/arsc/pool/TableStringPool.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java b/src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java index 121a972..423dfeb 100755 --- a/src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java +++ b/src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java @@ -17,11 +17,17 @@ package com.reandroid.lib.arsc.pool; import com.reandroid.lib.arsc.array.StringArray; import com.reandroid.lib.arsc.array.TableStringArray; +import com.reandroid.lib.arsc.chunk.ChunkType; +import com.reandroid.lib.arsc.header.HeaderBlock; +import com.reandroid.lib.arsc.io.BlockReader; import com.reandroid.lib.arsc.item.IntegerArray; import com.reandroid.lib.arsc.item.IntegerItem; import com.reandroid.lib.arsc.item.TableString; -public class TableStringPool extends BaseStringPool { +import java.io.IOException; +import java.io.InputStream; + + public class TableStringPool extends BaseStringPool { public TableStringPool(boolean is_utf8) { super(is_utf8); } @@ -49,4 +55,22 @@ public class TableStringPool extends BaseStringPool { getStyleArray().merge(stringPool.getStyleArray()); refreshUniqueIdMap(); } + + /** + * Loads string pool from table block (resources.arsc) + */ + public static TableStringPool readFromTable(InputStream inputStream) throws IOException { + //TODO: for better result, make blockReader to + // load buffer only the size of string pool + BlockReader blockReader = new BlockReader(inputStream); + HeaderBlock tableHeader = blockReader.readHeaderBlock(); + if(tableHeader.getChunkType()!=ChunkType.TABLE){ + throw new IOException("Not TableBlock: "+tableHeader); + } + blockReader.seek(tableHeader.getHeaderSize()); + TableStringPool stringPool = new TableStringPool(true); + stringPool.readBytes(blockReader); + blockReader.close(); + return stringPool; + } }