code: public static StringBlock read(IntReader reader) throws IOException {
          ReadUtil.readCheckType(reader,CHUNK_TYPE);
          int chunkSize=reader.readInt();
          int stringCount=reader.readInt();
          int styleOffsetCount=reader.readInt();
          int flags = reader.readInt();
          int stringsOffset=reader.readInt();
          int stylesOffset=reader.readInt();
  
          StringBlock block=new StringBlock();
          block.m_stringOffsets=reader.readIntArray(stringCount);
          if (styleOffsetCount!=0) {
              block.m_styleOffsets=reader.readIntArray(styleOffsetCount);
          }
          {
              int size=((stylesOffset==0)?chunkSize:stylesOffset)-stringsOffset;
              if ((size%4)!=0) {
                  throw new IOException("String data size is not multiple of 4 ("+size+").");
              }
              block.m_stringPool =reader.readByteArray(size);
          }
          if (stylesOffset!=0) {
              int size=(chunkSize-stylesOffset);
              if ((size%4)!=0) {
                  throw new IOException("Style data size is not multiple of 4 ("+size+").");
              }
              block.m_styles=reader.readIntArray(size/4);
          }
  
          // Set field flag to determine if stored in UTF-8 (or false for UTF-16).
          block.m_isUtf8 = (flags & UTF8_FLAG) == UTF8_FLAG;
  
          block.m_strings =new String[block.getCount()];
          for (int i=0;i!=block.getCount();++i) {
              block.m_strings[i]=block.stringAt(i);
          }
  
          return block;
      }
docs: Reads whole (including chunk type) string block from stream.
  Stream must be at the chunk type.