1

Androidのファイルからバイトを読み取ることができる必要があります。

どこを見てもFileInputStream、ファイルからバイトを読み取るために使用する必要があるようですが、それは私がやりたいことではありません。

配列に保存したいバイト幅の数値 (/edit) のテキスト表現を含む (編集) テキスト ファイルを読み取れるようにしたいと考えています。バイト配列に変換したいテキスト ファイルの例を次に示します。

0x04 0xF2 0x33 0x21 0xAA

最終ファイルはさらに長くなります。UsingFileInputStreamは、長さ 5 の配列を保存して上記の値を保持する各文字の値を取得します。配列を次のように処理したい:

ExampleArray[0] = (byte) 0x04;
ExampleArray[1] = (byte) 0xF2;
ExampleArray[2] = (byte) 0x33;
ExampleArray[3] = (byte) 0x21;
ExampleArray[4] = (byte) 0xAA;

テキストファイルで使用FileInputStreamすると、配列に書き込む必要がある値ではなく、文字の ASCII 値が返されます。

4

3 に答える 3

-1

バイトをテキストとして保存しないだけです。一度もない!0x00 はファイルに 1 バイトとして、または文字列として書き込むことができるため、この場合 (16 進数) は 4 倍のスペースを占有します。これを行う必要がある場合は、この決定がどれほどひどいものになるかについて話し合ってください! ただし、合理的な理由を提供できる場合は、回答
編集します。

次の場合は、実際のテキストとしてのみ保存します。

  • 簡単です(そうではありません)
  • それは価値を追加します(ファイルサイズが4(スペース数)を超えて増加すると価値が追加される場合、はい)
  • ユーザーがファイルを編集できるようにする必要がある場合 (「0x」を省略します...)

次のようにバイトを書き込むことができます。

public static void writeBytes(byte[] in, File file, boolean append) throws IOException {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(file, append);
        fos.write(in);
    } finally {
        if (fos != null)
            fos.close();
    }
}

次のように読みます。

public static byte[] readBytes(File file) throws IOException {
    return readBytes(file, (int) file.length());
}

public static byte[] readBytes(File file, int length) throws IOException {
    byte[] content = new byte[length];
    FileInputStream fis = null;

    try {
        fis = new FileInputStream(file);

        while (length > 0)
            length -= fis.read(content);
    } finally {
        if (fis != null)
            fis.close();
    }

    return content;
}

したがって、次のようになります。

public static void writeString(String in, File file, String charset, boolean append)
        throws IOException {
    writeBytes(in.getBytes(charset), file, append);
}

public static String readString(File file, String charset) throws IOException {
    return new String(readBytes(file), charset);
}

文字列を読み書きする。

Android の現在の Java ソース レベルが低すぎるため、try-with-resource コンストラクトを使用していないことに注意してください。:(

于 2013-09-26T14:02:27.120 に答える