ページ更新: 2004-10-07 (木) (5216日前)

関連: Java/Tips

  • とりあえずは NullOutputStream などがなにげに便利。
  • CountingOutputStream, TeeOutputStreamは、自分も同じ働きのクラスを作ってた‥‥
[編集]

情報源・ニュース #

Commons IO
http://jakarta.apache.org/commons/io/

Jakarta Commons-IO 1.1 - 全利用者にアップデートを推奨 (MYCOM PC WEB) 2005/10/11 (2005-12-09)
http://pcweb.mycom.co.jp/news/2005/10/11/020.html

[編集]

メモ #

[編集]

new byte[] の回数を抑えた ByteArrayOutputStream #

(2005-12-09)

「(sunの) java.io.ByteArrayOutputStream」と「org.apache.commons.io.output.ByteArrayOutputStream」の比較

  • 確保したバッファをListで管理。
  • バッファが足りなくなったときの挙動は:
    • (sunの) java.io.ByteArrayOutputStream は、新たにbyte[]を2倍の大きさで確保し、既存部分をコピーする。
    • org.apache.commons.io.output.ByteArrayOutputStream は、byte[]を確保、バッファのリストの末尾に追加
  • :よって、コピーの回数が少ない。(バッファ末尾に追加するときだけ?)

なお、Commons IO 1.0 と 1.1 では、ByteArrayOutputStream のコードは同一だった。

[編集]

16進数ダンプ #

2004-11-08

org.apache.commons.io.HexDump を使う。

http://jakarta.apache.org/commons/io/apidocs/org/apache/commons/io/HexDump.html

void dump(byte[] data, long offset, OutputStream stream, int index)

このOutputStreamへの出力のみが可能。(Stringを返すメソッドは存在しない)

[編集]

実行例と結果 #

byte[] data は、0〜255の値を入れてある。

dataの0バイト目から全部出力する。

HexDump.dump(data, 0, os, 0);
00000000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................
00000010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
00000020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  !"#$%&'()*+,-./
00000030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
:(略)

dataの32バイト目から全部出力する。int indexで指定する。

HexDump.dump(data, 0, os, 32);
00000020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  !"#$%&'()*+,-./
00000030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
00000040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO
00000050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_
 :(略)

dataの0バイト目から全部出力するが、アドレス表記を 0x00FF0000 から開始するようにする。long offset 引数を使う。(だったら、引数名は base の方がいいなあ)

HexDump.dump(data, 0x00FF0000, os, 0);
00FF0000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................
00FF0010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
00FF0020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  !"#$%&'()*+,-./
00FF0030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
 :(略)

offsetを0xFFFFFFE0を指定。アドレス表記は途中で0に戻る。

HexDump.dump(data, 0xFFFFFFE0, os, 0);
 :(略)
FFFFFFE0 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................
FFFFFFF0 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
00000000 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  !"#$%&'()*+,-./
00000010 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
 :(略)