com.ibm.icu.impl.ICUBinaryStream Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of icu4j Show documentation
Show all versions of icu4j Show documentation
International Component for Unicode for Java (ICU4J) is a mature, widely used Java library
providing Unicode and Globalization support
/*
**********************************************************************
* Copyright (c) 2002-2010, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Alan Liu
* Created: November 5 2002
* Since: ICU 2.4
**********************************************************************
*/
package com.ibm.icu.impl;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* A DataInputStream that implements random-access seeking. For this
* to work, the size of the data stream must be known in advance, or
* the data must be supplied as a raw byte[] array.
*
* Seeking doesn't work directly on all streams. If a given stream
* doesn't support seeking, extract the bytes into a byte[] array and
* use the byte[] constructor.
*/
class ICUBinaryStream extends DataInputStream {
/**
* Construct a stream from the given stream and size.
* @param stream the stream of data
* @param size the number of bytes that should be made available
* for seeking. Bytes beyond this may be read, but seeking will
* not work for offset >= size.
*/
public ICUBinaryStream(InputStream stream, int size) {
super(stream);
mark(size);
}
/**
* Construct a stream from the given raw bytes.
*/
public ICUBinaryStream(byte[] raw) {
this(new ByteArrayInputStream(raw), raw.length);
}
/**
* Seek to the given offset. Offset is from the position of the
* stream passed to the constructor, or from the start of the
* byte[] array.
*/
public void seek(int offset) throws IOException {
reset();
int actual = skipBytes(offset);
if (actual != offset) {
throw new IllegalStateException("Skip(" + offset + ") only skipped " +
actual + " bytes");
}
}
}