0

floatバイナリ データを受け取るプログラムがあり、その見出しintに応じて、、、、、、などを表しdoubleます。charstring

プログラムでは、ByteBufferクラスを利用しbyte[]てそれを取得し、getFloat()orgetInt()などのメソッドを使用して内容を使用可能な形式に抽出します。

すべての可能性に対してスイッチまたは if/else ステートメントを使用せずに、 との間で効率getFloat()的に値を渡したいと思います。getInt()System.out.println()

println()などを受け入れることができるので、タイプに関係なくデータを詰め込みFloat、値を関数に返すIntことができるJavaオブジェクトがあればいいのにと思います。getXXX()println()

唯一の問題は、これを行う Java クラスを知らないことと、Google 検索が乾燥していることです。クラス知ってる人いますか?

私はそれを書くことができると思いますが、最初はJava認定の方法ですべてをやろうとしています.

編集:これが私の現在のコードの例です:

ByteBuffer buffer = ByteBuffer.wrap(dat.message);

if (dat.dataType.equalsIgnoreCase("float")) {

    System.out.println("Message: " + buffer.getFloat());

} else if (dat.dataType.equalsIgnoreCase("int")) {

    System.out.println("Message: " + buffer.getInt());

} else if (dat.dataType.equalsIgnoreCase("char")) {

    System.out.println("Message: " + buffer.getChar());

} else if (dat.dataType.equalsIgnoreCase("long")) {

    System.out.println("Message: " + buffer.getLong());

} else if (dat.dataType.equalsIgnoreCase("boolean")) {

    System.out.println("Message: " + buffer.get());

} else if (dat.dataType.equalsIgnoreCase("string")) {

    String str = new String(dat.message);
    System.out.println("Message: " + str);

}

私にはあまりにも醜いので、Java にはもっと良い方法があるはずです。

4

2 に答える 2

4
public Object getValue(Dat dat) {
    ByteBuffer buffer = ByteBuffer.wrap(dat.message);

    if (dat.dataType.equalsIgnoreCase("float")) {
        return buffer.getFloat();
    } else if (dat.dataType.equalsIgnoreCase("int")) {
        return buffer.getInt();
    } else if (dat.dataType.equalsIgnoreCase("char")) {
        return buffer.getChar();
    } else if (dat.dataType.equalsIgnoreCase("long")) {
        return buffer.getLong();
    } else if (dat.dataType.equalsIgnoreCase("boolean")) {
        return buffer.get() != 0;
    } else if (dat.dataType.equalsIgnoreCase("string")) {
        return new String(dat.message);
    }
}

// ...

System.out.println("Message: " + getValue(dat));

は であるfloatに自動ボックス化されFloatますObject
は であるintに自動ボックス化されIntegerますObject
等々。

于 2013-02-22T22:53:18.777 に答える
1
ByteBuffer buffer = ByteBuffer.wrap(dat.message);
System.out.println("Message: " + buffer);

Java のすべてのオブジェクトは、Object を継承する何らかのクラスのインスタンスです。printlnは sを受け入れるのでObject、渡す型を気にする必要はありません。


編集: の宣言を提供できますdatか?

于 2013-02-22T22:52:10.397 に答える