create string pool reader

This commit is contained in:
REAndroid 2023-01-07 09:12:04 -05:00
parent e3097de134
commit 459307ac26

View File

@ -17,11 +17,17 @@ package com.reandroid.lib.arsc.pool;
import com.reandroid.lib.arsc.array.StringArray; import com.reandroid.lib.arsc.array.StringArray;
import com.reandroid.lib.arsc.array.TableStringArray; 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.IntegerArray;
import com.reandroid.lib.arsc.item.IntegerItem; import com.reandroid.lib.arsc.item.IntegerItem;
import com.reandroid.lib.arsc.item.TableString; import com.reandroid.lib.arsc.item.TableString;
public class TableStringPool extends BaseStringPool<TableString> { import java.io.IOException;
import java.io.InputStream;
public class TableStringPool extends BaseStringPool<TableString> {
public TableStringPool(boolean is_utf8) { public TableStringPool(boolean is_utf8) {
super(is_utf8); super(is_utf8);
} }
@ -49,4 +55,22 @@ public class TableStringPool extends BaseStringPool<TableString> {
getStyleArray().merge(stringPool.getStyleArray()); getStyleArray().merge(stringPool.getStyleArray());
refreshUniqueIdMap(); 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;
}
} }