- PR -

istreamをbyte[]に落としたい

1
投稿者投稿内容
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2004-11-11 18:34
いつも大変御世話になっております。_(__)_

byte列を操作したくてCで言うmemcpyやmemcat、reallocに相当する関数を探しているのですが見つかりません。このような関数はJavaには無いのでしょうか?

やりたいことはサイズがわからないistreamをbyte[]に落としたいのです。
現状では下記のように最初に適当なメモリ領域を確保しているのですが、これだと足りないとき問題になるため、ストリームのサイズに応じて領域を拡大していけるようにしたいです。

コード:
byte[] buf = new byte[199999];
int len, off = 0;
while((len = is.read(buf, off, 8192)) != -1)
	off = off + len;

シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-11 18:44
どうぞ。
コード:


byte[] buf = new byte[8192];
ByteArrayOutputStream out = new ByteArrayOutputStream();

while(is.read(buf, 0, buf.length) != -1){
out.write(buf,0,length);
}

byte[]result = out.toByteArray();




[ メッセージ編集済み 編集者: シュン 編集日時 2004-11-11 18:45 ]
りぼ
会議室デビュー日: 2004/06/15
投稿数: 8
投稿日時: 2004-11-11 18:51
引用:

hiro-taさんの書き込み (2004-11-11 18:34) より:
いつも大変御世話になっております。_(__)_

byte列を操作したくてCで言うmemcpyやmemcat、reallocに相当する関数を探しているのですが見つかりません。このような関数はJavaには無いのでしょうか?




javaにはメモリを扱うクラスはありません。

引用:


やりたいことはサイズがわからないistreamをbyte[]に落としたいのです。
現状では下記のように最初に適当なメモリ領域を確保しているのですが、これだと足りないとき問題になるため、ストリームのサイズに応じて領域を拡大していけるようにしたいです。

コード:
byte[] buf = new byte[199999];
int len, off = 0;
while((len = is.read(buf, off, 8192)) != -1)
	off = off + len;





ByteArrayOutputStreamを使用すればいいのでは?

byte[] tmpBuff = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len, off = 0;
while((len = is.read(tmpBuff, off, tmpBuff.length)) != -1) {
bos.write(tmpBuff, off, len);
off = off + len;
}
byte[] buff = bos.toByteArray();
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2004-11-11 20:34
りぼさん、シュンさんありがとうございます。
ByteArrayOutputStreamを使えば一発ですね。
シュンさんのやり方を使わせていただきました。
ありがとうございました。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-15 11:27
引用:

りぼさんの書き込み (2004-11-11 18:51) より:

javaにはメモリを扱うクラスはありません。




JDK1.4以降なら、あることはありますよ。

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/nio/ByteBuffer.html

ダイレクトバッファと呼ばれるものは、いわば安全なmalloc()です。
メモリマップドファイルなんてのも使えるようになってますよ。
りぼ
会議室デビュー日: 2004/06/15
投稿数: 8
投稿日時: 2004-11-16 09:13
シュンさん、情報ありがとうございます。


引用:

シュンさんの書き込み (2004-11-15 11:27) より:
引用:

りぼさんの書き込み (2004-11-11 18:51) より:

javaにはメモリを扱うクラスはありません。




JDK1.4以降なら、あることはありますよ。

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/nio/ByteBuffer.html

ダイレクトバッファと呼ばれるものは、いわば安全なmalloc()です。
メモリマップドファイルなんてのも使えるようになってますよ。

1

スキルアップ/キャリアアップ(JOB@IT)