我有一个接收二进制数据的程序,根据其标题,代表float
,int
,double
,char
,string
等等。
在程序中,我使用ByteBuffer
类来获取byte[]
,然后使用getFloat()
或getInt()
等方法将内容提取到可用的内容中形式。
我希望有效地将getFloat()
或getInt()
的值传递给System.out.println()
,而不使用switch或if / else语句来实现所有可能性。
由于println()
可以接受Float
,Int
或其他任何东西,如果有一个我可以使用的Java对象可以填充getXXX()
数据会很好into,无论类型如何,然后将值返回到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必须有更好的方法。
答案 0 :(得分: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
。{。}
等等。
答案 1 :(得分:1)
ByteBuffer buffer = ByteBuffer.wrap(dat.message);
System.out.println("Message: " + buffer);
Java中的所有对象都是从Object继承的某个类的实例。由于println
接受Object
,因此您无需担心传入的类型。
编辑:您能为dat
提供声明吗?