public final void readInputStream(InputStream input) throws IOException, ID3ReaderException { int rc; readerPosition = 0; char[] tagHeaderSource = readBytes(input, HEADER_LENGTH); tagHeader = createTagHeader(tagHeaderSource); if (tagHeader == null) { onNoTagHeaderFound(); } else { rc = onStartTagHeader(tagHeader); if (rc == ACTION_SKIP) { onEndTag(); } else { while (readerPosition < tagHeader.getSize()) { FrameHeader frameHeader = createFrameHeader(readBytes(input, HEADER_LENGTH)); if (checkForNullString(frameHeader.getId())) { break; } else { rc = onStartFrameHeader(frameHeader, input); if (rc == ACTION_SKIP) { if (frameHeader.getSize() + readerPosition > tagHeader.getSize()) { break; } else { skipBytes(input, frameHeader.getSize()); } } } } onEndTag(); } } }