2

を使用して、1つの整数と3つの文字列をファイルに書き込むC#.netのプログラムがありますBinaryWriter.Write()

現在、私はJavaでプログラミングしています(Androidの場合、Javaは初めてです)。以前は、C#を使用してファイルに書き込まれたデータにアクセスする必要があります。

とを使ってみDataInputStream.readInt()ましDataInputStream.readUTF()たが、うまくいきません。私は通常:を取得しUTFDataFormatExceptionます

java.io.UTFDataFormatException:バイト21周辺の不正な入力

または、Stringintが得るのは間違っています...

FileInputStream fs = new FileInputStream(strFilePath);
DataInputStream ds = new DataInputStream(fs);
int i;
String str1,str2,str3;
i=ds.readInt();
str1=ds.readUTF();
str2=ds.readUTF();
str3=ds.readUTF();
ds.close();

これを行う適切な方法は何ですか?

4

3 に答える 3

5

ここに、Javaで.netのbinaryWriter形式を読み取る方法の簡単な例を書きました。

リンクからの抜粋:

   /**
 * Get string from binary stream. >So, if len < 0x7F, it is encoded on one
 * byte as b0 = len >if len < 0x3FFF, is is encoded on 2 bytes as b0 = (len
 * & 0x7F) | 0x80, b1 = len >> 7 >if len < 0x 1FFFFF, it is encoded on 3
 * bytes as b0 = (len & 0x7F) | 0x80, b1 = ((len >> 7) & 0x7F) | 0x80, b2 =
 * len >> 14 etc.
 *
 * @param is
 * @return
 * @throws IOException
 */
public static String getString(final InputStream is) throws IOException {
    int val = getStringLength(is);

    byte[] buffer = new byte[val];
    if (is.read(buffer) < 0) {
        throw new IOException("EOF");
    }
    return new String(buffer);
}

/**
 * Binary files are encoded with a variable length prefix that tells you
 * the size of the string. The prefix is encoded in a 7bit format where the
 * 8th bit tells you if you should continue. If the 8th bit is set it means
 * you need to read the next byte.
 * @param bytes
 * @return
 */
public static int getStringLength(final InputStream is) throws IOException {
    int count = 0;
    int shift = 0;
    boolean more = true;
    while (more) {
        byte b = (byte) is.read();
        count |= (b & 0x7F) << shift;
        shift += 7;
        if((b & 0x80) == 0) {
            more = false;
        }
    }
    return count;
}
于 2012-10-15T04:50:30.697 に答える
0

その名前が示すように、BinaryWriterはバイナリ形式で書き込みます。正確には.Netバイナリ形式であり、Javaは.Net言語ではないため、それを読み取る方法はありません。相互運用可能な形式を使用する必要があります。

xmlやjsonなどの既存の形式、またはその他の相互運用形式を選択できます。

または、独自のデータを作成することもできます。ただし、データがこのように作成できるほど単純である場合に限ります(ここではそうです)。文字列の形式がわかっていれば、ファイルに文字列を書き込むだけです(たとえば、StreamWriterを使用)。次に、Javaからファイルを文字列として読み取り、解析します。

于 2012-07-08T11:51:34.817 に答える
0

この質問でBinaryWriterが使用する形式についての非常に良い説明があります。ここで、ByteArrayInputStreamを使用してデータを読み取り、単純なトランスレーターを作成できるはずです。

于 2012-07-08T12:35:37.367 に答える