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; + } }