1

バイト配列に変換する必要がある bin ファイルがあります。誰でもこれを行う方法を教えてもらえますか?

これが私がこれまでに持っているものです:

File f = new File("notification.bin");
is = new FileInputStream(f);

long length = f.length();

/*if (length > Integer.MAX_VALUE) {
    // File is too large
}*/

// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];

// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
    offset += numRead;
}

// Ensure all the bytes have been read in
if (offset < bytes.length) {
    throw new IOException("Could not completely read file "+f.getName());
}

しかし、それは機能していません...

キャディ

4

6 に答える 6

2

これを使ってみてください

public byte[] readFromStream(InputStream inputStream) throws Exception
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    byte[] data = new byte[4096];
    int count = inputStream.read(data);
    while(count != -1)
    {
        dos.write(data, 0, count);
        count = inputStream.read(data);
    }

    return baos.toByteArray();
}

ところで、Java コードまたは C++ コードが必要ですか。あなたの質問のコードを見て、私はそれがJavaコードであると想定したため、Javaの回答を与えました

于 2009-10-02T20:20:45.137 に答える
1

おそらく、メモリ マップド ファイルを使用する方がよいでしょう。この質問を参照してください

于 2009-10-02T20:17:58.150 に答える
0

本当にそのようにする必要がない限り、やっていることを単純化してください。

すべてfor ループ内で実行するのは非常に巧妙な方法のように思えるかもしれませんが、デバッグする必要があり、解決策がすぐにわからない場合は、自分自身を悩ませています。

于 2009-10-02T20:25:18.620 に答える
0

この回答では、URLから読み取りました

InputStream が URLConnection ではなく File からのものになるように変更できます。

何かのようなもの:

    FileInputStream inputStream = new FileInputStream("your.binary.file");

    ByteArrayOutputStream output = new ByteArrayOutputStream();
    byte [] buffer               = new byte[ 1024 ];

    int n = 0;
    while (-1 != (n = inputStream.read(buffer))) {
       output.write(buffer, 0, n);
    }
    inputStream.close();

于 2009-10-02T23:11:40.703 に答える
0

オープン ソース ライブラリapache commons-io IOUtils.toByteArray(inputStream)を試してみてください 。ファイルを読み取る必要がある開発者は、あなたが最初でも最後でもなく、毎回再発明する必要もありません。

于 2009-10-02T23:17:28.173 に答える