public class ByteUtil extends Object
Javaのクラスライブラリには、byte配列を扱うものが少ないので、自分で作りました。 必要に応じて、機能を足しているので、次第にメソッドが増えていきます。
あくまでも、piaxの中で内部処理を分かって用いられることを前提にしているため、 引数チェックはしていません。
メモ:
可変長byte配列を扱うクラスライブラリが望まれる。
ByteArrayOutputStream をこの用途で使っている箇所もあるが、
ByteArrayOutputStream が行う処理は byte配列を頻繁にreallocateしていて
必ずしも効率の良いコードになっていない。
効率化のためには、apache commons-io の
org.apache.commons.io.output.ByteArrayOutputStream を使うように
変更する(または自分で実装する)必要が出てくるかもしれない。
| コンストラクタと説明 |
|---|
ByteUtil() |
| 修飾子とタイプ | メソッドと説明 |
|---|---|
static String |
byte2Binary(byte b)
指定されたbyteデータを2進法の文字列に変換する。
|
static String |
bytes2Binary(byte[] b)
指定されたbyte列データを2進法の文字列に変換する。
|
static void |
bytes2File(byte[] b,
File file) |
static String |
bytes2Hex(byte[] b) |
static int |
bytes2Int(byte[] b) |
static int |
bytes2Int(byte[] b,
int off) |
static long |
bytes2Long(byte[] b) |
static long |
bytes2Long(byte[] b,
int off) |
static void |
bytes2Stream(byte[] b,
OutputStream out) |
static int |
commonPostfixLen(byte[] b1,
byte[] b2)
指定された2つのbyte列に共通するpostfixのbit長を返す。
|
static int |
commonPostfixLen(byte b1,
byte b2)
指定された2つのbyteに共通するpostfixのbit長を返す。
|
static int |
commonPrefixLen(byte[] b1,
byte[] b2)
指定された2つのbyte列に共通するprefixのbit長を返す。
|
static int |
commonPrefixLen(byte b1,
byte b2)
指定された2つのbyteに共通するprefixのbit長を返す。
|
static int |
compare(byte[] b1,
byte[] b2)
指定された2つのbyte列を符号なし整数として比較して、b1がb2より小さい場合は負の整数、
両方が等しい場合は0、b1がb2より大きい場合は正の整数を返す。
|
static int |
compareAsNumber(byte[] b1,
byte[] b2)
指定された2つのbyte列を符号なし整数として比較して、b1がb2より小さい場合は負の整数、
両方が等しい場合は0、b1がb2より大きい場合は正の整数を返す。
|
static byte[] |
concat(byte[] b1,
byte[] b2) |
static int |
decode4escape(byte[] b,
int len,
byte[] buf,
byte[] escapeAndElimBytes)
encode4escapeメソッドによってencodeされたbyte配列を
元のbyte配列にdecodeする。 |
static String |
dumpBytes(byte[] b) |
static String |
dumpBytes(byte[] b,
int offset,
int len)
byte列をダンプ用の文字列に変換する。
|
static String |
dumpBytes(ByteBuffer bbuf) |
static int |
encode4escape(byte[] b,
int len,
byte[] buf,
byte[] escapeAndElimBytes)
与えられたbyte配列を指定されたbyte値が出現しないようにencodeする。
|
static boolean |
equals(byte[] b1,
byte[] b2)
指定された 2つのbyte列が同等である場合に trueを返す。
|
static byte[] |
file2Bytes(File file) |
static Comparator<byte[]> |
getComparator()
byte列を符号なし整数として比較する Comparatorを取得する。
|
static byte[] |
hex2Bytes(String s) |
static byte[] |
hexBytes2Bytes(byte[] hex) |
static int |
indexOf(byte[] b,
byte x) |
static byte[] |
int2bytes(int x) |
static boolean |
isASCII(byte[] b)
指定されたbyte列が、7bit ASCII文字列である場合はtrueを返す。
|
static byte[] |
long2bytes(long x) |
static int |
reverse32(int baseno) |
static byte |
reverse8(byte v) |
static boolean |
startsWith(byte[] b,
byte[] prefix) |
static byte[] |
stream2Bytes(InputStream in) |
static boolean |
testBit(byte[] b,
int ix)
指定されたbyte列の先頭のbyteを起点として上位からカウントしたixビット目が1か0かを調べる。
|
static boolean |
testBit(byte b,
int ix)
指定されたbyteの上位からixビット目が1か0かを調べる。
|
static byte[] |
url2Bytes(URL url) |
public static Comparator<byte[]> getComparator()
public static int compare(byte[] b1,
byte[] b2)
比較するbyte列の長さが異なる場合は、長さの長いbyte列が大きいとみなされる。 このため、equalsと互換性がある。
b1 - byte列b2 - byte列public static int compareAsNumber(byte[] b1,
byte[] b2)
両方のbyte列の長さが異なる場合は、長さの短いbyte列の上位に0を埋めて同じ長さのbyte列と みなした上で比較する。 このため、equalsと互換性はない。
b1 - byte列b2 - byte列public static boolean equals(byte[] b1,
byte[] b2)
2つのbyte列が同等とみなされるのは、同じ数の要素があり、対応する対の要素がすべて同等である場合となる。 compareAsNumberメソッドが異なる長さのbyte列であっても、数値として等しい場合に同等と返す点に注意。
b1 - byte列b2 - byte列public static byte[] concat(byte[] b1,
byte[] b2)
public static boolean testBit(byte b,
int ix)
throws IllegalArgumentException
b - バイトデータix - 上位から数えたビット数IllegalArgumentException - 0 <= ix < 8 でない場合public static boolean testBit(byte[] b,
int ix)
throws IllegalArgumentException
b - バイト列データix - 上位から数えたビット数IllegalArgumentException - 0 <= ix < 8*byte長、 でない場合public static int commonPostfixLen(byte b1,
byte b2)
b1 - byteb2 - bytepublic static int commonPostfixLen(byte[] b1,
byte[] b2)
b1 - byte列b2 - byte列public static int commonPrefixLen(byte b1,
byte b2)
b1 - byteb2 - bytepublic static int commonPrefixLen(byte[] b1,
byte[] b2)
b1 - byte列b2 - byte列public static int reverse32(int baseno)
public static byte reverse8(byte v)
public static int bytes2Int(byte[] b)
public static int bytes2Int(byte[] b,
int off)
public static byte[] int2bytes(int x)
public static long bytes2Long(byte[] b)
public static long bytes2Long(byte[] b,
int off)
public static byte[] long2bytes(long x)
public static byte[] stream2Bytes(InputStream in) throws IOException
IOExceptionpublic static byte[] file2Bytes(File file) throws FileNotFoundException, IOException
public static byte[] url2Bytes(URL url) throws FileNotFoundException, IOException
public static void bytes2Stream(byte[] b,
OutputStream out)
throws IOException
IOExceptionpublic static void bytes2File(byte[] b,
File file)
throws FileNotFoundException,
IOException
public static String byte2Binary(byte b)
b - bytepublic static String bytes2Binary(byte[] b)
b - byte列public static String bytes2Hex(byte[] b)
public static byte[] hexBytes2Bytes(byte[] hex)
public static byte[] hex2Bytes(String s) throws IllegalArgumentException
public static boolean isASCII(byte[] b)
b - byte列public static String dumpBytes(byte[] b, int offset, int len)
0x20-0x7e はACSII文字として出力し、 他のbyte値については、16進表現+'.' を出力する。(例:".8f")
b - byte列offset - offsetlen - 長さpublic static String dumpBytes(byte[] b)
public static String dumpBytes(ByteBuffer bbuf)
public static boolean startsWith(byte[] b,
byte[] prefix)
public static int indexOf(byte[] b,
byte x)
public static int encode4escape(byte[] b,
int len,
byte[] buf,
byte[] escapeAndElimBytes)
throws ArrayIndexOutOfBoundsException
元のbyte配列に、指定されたbyte値が出現した場合、1byte目をescape用の byte, 2byte目を対応するescape codeとする2byteの列に置き換える。
引数 escapeAndElimBytes の1byte目にはescape用のbyte, 2byte目以降に 出現を抑制したいbyte値(複数可)をセットする。
b - ソースとなるbyte配列len - ソースとなるbyte配列の長さbuf - 変換後のbyte配列を入れるバッファescapeAndElimBytes - escape用のbyteと出現を抑制したいbyte値(複数可)ArrayIndexOutOfBoundsException - バッファが十分な容量を持たない場合public static int decode4escape(byte[] b,
int len,
byte[] buf,
byte[] escapeAndElimBytes)
throws IllegalArgumentException,
ArrayIndexOutOfBoundsException
encode4escapeメソッドによってencodeされたbyte配列を
元のbyte配列にdecodeする。
decode処理の場合に限り、ソースとして指定する配列を変換後のバッファと して用いる配列に指定してもよい。
b - ソースとなるbyte配列len - ソースとなるbyte配列の長さbuf - 変換後のbyte配列を入れるバッファescapeAndElimBytes - escape用のbyteと出現を抑制したいbyte値(複数可)IllegalArgumentException - ソースとなるbyte配列が正しくencodeされたものでない場合ArrayIndexOutOfBoundsException - バッファが十分な容量を持たない場合Copyright © 2017. All rights reserved.