2 * binary parser interface
4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.bin.parser;
10 import java.io.IOException;
15 * <p>バイト列、各種プリミティブ型値およびエンコードされた文字列を読み込む。
17 * <p>long,double、およびビッグエンディアン形式のデータは未サポート。
19 public interface BinParser {
24 * @return 入力ソースの読み込み位置。単位はbyte。
26 public abstract long getPosition();
29 * 入力ソースにまだデータが残っているか判定する。
31 * @return まだ読み込んでいないデータが残っていればtrue
32 * @throws IOException IOエラー
34 public abstract boolean hasMore() throws IOException;
39 * @param skipLength 読み飛ばすバイト数。
40 * @throws IOException IOエラー
41 * @throws MmdEofException 読み飛ばす途中でストリーム終端に達した。
42 * @see java.io.InputStream#skip(long)
44 public abstract void skip(long skipLength)
45 throws IOException, MmdEofException;
51 * @param off 読み込み開始オフセット
52 * @param length 読み込みバイト数
53 * @throws NullPointerException 配列がnull
54 * @throws IndexOutOfBoundsException 引数が配列属性と矛盾
55 * @throws IOException IOエラー
56 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
57 * @see java.io.InputStream#read(byte[], int, int)
59 public abstract void parseByteArray(byte[] dst, int off, int length)
60 throws NullPointerException,
61 IndexOutOfBoundsException,
68 * <p>配列要素全ての読み込みが試みられる。
71 * @throws NullPointerException 配列がnull
72 * @throws IOException IOエラー
73 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
74 * @see java.io.InputStream#read(byte[])
76 public abstract void parseByteArray(byte[] dst)
77 throws NullPointerException, IOException, MmdEofException;
83 * @throws IOException IOエラー
84 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
86 public abstract byte parseByte() throws IOException, MmdEofException;
89 * 符号無し値としてbyte値を読み込み、int型に変換して返す。
91 * <p>符号は拡張されない。(0xffは0x000000ffとなる)
93 * @return 読み込まれた値のint値
94 * @throws IOException IOエラー
95 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
97 public abstract int parseUByteAsInt() throws IOException, MmdEofException;
100 * byte値を読み込み、boolean型に変換して返す。
102 * <p>0x00は偽、それ以外は真と解釈される。
104 * @return 読み込まれた値のboolean値
105 * @throws IOException IOエラー
106 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
108 public abstract boolean parseBoolean()
109 throws IOException, MmdEofException;
114 * <p>short値はリトルエンディアンで格納されていると仮定される。
116 * @return 読み込んだshort値
117 * @throws IOException IOエラー
118 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
120 public abstract short parseLeShort() throws IOException, MmdEofException;
123 * 符号無し値としてshort値を読み込み、int型に変換して返す。
125 * <p>符号は拡張されない。(0xffffは0x0000ffffとなる)
127 * <p>short値はリトルエンディアンで格納されていると仮定される。
129 * @return 読み込まれた値のint値
130 * @throws IOException IOエラー
131 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
133 public abstract int parseLeUShortAsInt()
134 throws IOException, MmdEofException;
139 * <p>int値はリトルエンディアンで格納されていると仮定される。
142 * @throws IOException IOエラー
143 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
145 public abstract int parseLeInt() throws IOException, MmdEofException;
150 * <p>float値はリトルエンディアンで格納されていると仮定される。
152 * @return 読み込んだfloat値
153 * @throws IOException IOエラー
154 * @throws MmdEofException 読み込む途中でストリーム終端に達した。
156 public abstract float parseLeFloat() throws IOException, MmdEofException;
160 * @param decoder 文字デコーダ
161 * @param byteLen 読み込む固定バイト長
163 * @throws IOException 入力エラー
164 * @throws MmdEofException 固定長バイト列を読む前に末端に達した。
165 * @throws MmdFormatException 文字エンコーディングに関するエラー
167 public abstract String parseString(TextDecoder decoder, int byteLen)
168 throws IOException, MmdEofException, MmdFormatException;