package com.ctreber.aclib.codec; import java.io.IOException; import java.io.InputStream; /** * <p> * File decoder based on InputStream (Chris' implementation). * </p> * @author © Christian Treber, ct@ctreber.com */ public class StreamDecoder extends AbstractDecoder { private final InputStream _stream; /** * Create a BIG_ENDIAN file decoder. See * {@link AbstractDecoder#setEndianess}to change the default behavior. * @param pStream */ public StreamDecoder(final InputStream pStream) { super(); _stream = pStream; } public void seek(final long pBytes) throws IOException { final long lSkip = pBytes - getPos(); if (lSkip >= 0) { final long lBytesSkipped = _stream.skip(lSkip); if (lBytesSkipped != lSkip) { throw new IOException("Tried to skip " + lSkip + ", but skipped " + lBytesSkipped); } _pos += lSkip; } else { throw new IllegalArgumentException( "Can't seek a position already passed (skip " + lSkip + ")"); } } public byte[] readBytes(final long pBytes, final byte[] pBuffer) throws IOException { byte[] lBuffer = pBuffer; if (lBuffer == null) { lBuffer = new byte[(int) pBytes]; } else { if (lBuffer.length < pBytes) { throw new IllegalArgumentException( "Insufficient space in buffer"); } } final int lBytesRead = _stream.read(lBuffer, 0, (int) pBytes); if (lBytesRead != pBytes) { throw new IOException("Tried to read " + pBytes + " bytes, but obtained " + lBytesRead); } _pos += pBytes; return lBuffer; } /** * @throws IOException * @see com.ctreber.aclib.codec.AbstractDecoder#close() */ public void close() throws IOException { _stream.close(); } }
最近下载更多
lzl111213 LV1
2023年6月21日
wyx065747 LV67
2022年5月7日
微信网友_5852742079762432 LV6
2022年4月11日
一个好人520 LV10
2021年9月29日
wangdongtai LV31
2021年8月2日
yxcker LV7
2021年7月9日
时光凉薄 LV2
2021年7月9日
Mayoubin2001 LV21
2021年6月10日
adim10912 LV2
2020年12月27日
Demo1111 LV30
2020年12月25日
最近浏览更多
花朝廿五 LV1
6月10日
于子洲 LV1
6月2日
JulyMagnolia LV4
4月29日
cxz2132132 LV11
2023年12月9日
pangzhihui LV14
2023年11月13日
543539666 LV7
2023年8月30日
NicLee
2023年7月7日
暂无贡献等级
lzl111213 LV1
2023年6月21日
cmq258159 LV2
2023年6月20日
数据库1 LV12
2023年5月17日