java - .netで書かれたファイルから文字を読み取る

java android .net character-encoding

Javaを使用して、.net binaryWriterで記述されたファイルから文字列を読み取ろうとしています。

問題は、.netバイナリライターが文字列に7ビット形式を使用しているためだと思います。オンラインで調べたところ、バイナリリーダーのreadString()メソッドのように機能するはずのこのコードに出くわしました。これは、DataInputStreamを拡張する私のCSDataInputStreamクラスにあります。

public String readStringCS()  throws IOException {
    int stringLength = 0;
    boolean stringLengthParsed = false;
    int step = 0;
    while(!stringLengthParsed) {
        byte part = readByte();
        stringLengthParsed = (((int)part >> 7) == 0);
        int partCutter = part & 127;
        part = (byte)partCutter;
        int toAdd = (int)part << (step*7);
        stringLength += toAdd;
        step++;
    }
    char[] chars = new char[stringLength];
    for(int i = 0; i < stringLength; i++) {
        chars[i] = readChar();
    }
    return new String(chars);
}


最初の部分は、正しい量の文字(7)を返すため、機能しているようです。しかし、それが文字を読むとき、彼らはすべて中国人です!問題がDataInputStream.readChar()にあると確信していますが、なぜ機能しないのかわかりません...

Character.reverseBytes(readChar());


charを読み取ってそれが機能するかどうかを確認しますが、異なる漢字を返すだけです。

たぶん私は.netの文字の読み方をエミュレートする必要がありますか?どうすればいいですか?

他に何か不足していますか?

ありがとう。
答え
さて、あなたはそれをその音によって正しく解析しました-しかし、あなたはそれを文字の長さとして扱います。ドキュメントからわかる限り、それはバイト単位の長さです。

したがって、データを正しい長さのbyte[]に読み取ってから、次を使用する必要があります。

return new String(bytes, encoding);


ここで、encodingは.NETから書かれたものに基づいた適切なコーディングです...デフォルトではUTF-8になりますが、それ以外のものとして指定することもできます。

余談ですが、私は個人的にはDataInputStreamを拡張しません-代わりにそれを作成します。つまり、タイプまたはメソッドにDataInputStreamを使用させます(または単にInputStreamを取得してDataInputStreamでラップします)。一般に、継承よりも構成を優先すると、私の経験では、コードがより明確になり、保守が容易になります。
関連記事

java - CLIで同等のJUnitテスト

java - J2MEのacos関数をEclipseで使用する際の問題

java - Java 7 JVMは完全に本稼働の準備ができていますか? [閉まっている]

java - HQLサブクエリを基準に変換する

java - Apache POIを使用してpostgresデータベース(byteaなど)に保存されたxlsxファイルを読み取ることができない

java - Axis 1.4 SOAP呼び出しのテスト時の例外/戻り値の条件付きシミュレーション

java - コンポーネントのウィケットイベントハンドラーを手動で呼び出す

java - JSF 2.0カスタムコンポーネントとPrimefacesのヘルプ

java - Javaクライアント側のポートリスナーの改善について

java - NettyでPOSTパラメータを送信し、なぜDefaultHttpDataFactoryがリリースにないのですか?