public void read(IntReader reader) throws IOException {
			mChunkSize = reader.readInt();
			mStringsCount = reader.readInt();
			mStylesCount = reader.readInt();
			
			mEncoder = reader.readInt();//utf-8 or uft16
			
			mStrBlockOffset =reader.readInt();
			mStyBlockOffset =reader.readInt();
			
			if(mStringsCount > 0){
				mPerStrOffset = reader.readIntArray(mStringsCount);
				mStrings = new ArrayList<String>(mStringsCount);
			}
			
			if(mStylesCount > 0){
				mPerStyOffset = reader.readIntArray(mStylesCount);
				mStyles = new ArrayList<Style>();
			}
			
			//read string
			if(mStringsCount >0){
				int size = ((mStyBlockOffset == 0)?mChunkSize:mStyBlockOffset) - mStrBlockOffset;
				byte[] rawStrings = reader.readByteArray(size);
				
				for(int i =0; i < mStringsCount ; i++){
					int offset = mPerStrOffset[i];
		        	short len = toShort(rawStrings[offset], rawStrings[offset+1]);
					mStrings.add(i,new String(rawStrings,offset+2, len*2, Charset.forName("UTF-16LE")));
				}
			}
			
			//read styles
			if(mStylesCount > 0){
				int size = mChunkSize - mStyBlockOffset;
				int[] styles = reader.readIntArray(size/4);
				

				for(int i = 0; i< mStylesCount; i++){
					int offset = mPerStyOffset[i];
					int j = offset;
					for(; j< styles.length; j++){
						if(styles[j] == -1) break;
					}
					
					int[] array = new int[j-offset];
					System.arraycopy(styles, offset, array, 0, array.length);
					Style d = Style.parse(array);
					
					mStyles.add(d);
				}
			}
        }