[英]Return Object[] in Java
我需要返回整数和字节数组,我发现可以使用Object []返回它们,但是我不确定如何获取整数和字节数组。
它返回带有整数和字节数组的Object:
public static Object[] readVarInt(DataInputStream in) throws IOException {
int i = 0;
int j = 0;
byte[] byteArr = null;
byte b = 0;
while (true) {
int k = in.readByte();
i |= (k & 0x7F) << j++ * 7;
if (j > 5) {
throw new RuntimeException("VarInt too big");
}
if ((k & 0x80) != 128) {
break;
}
byteArr = Arrays.copyOf(byteArr, b);
byteArr[b] = (byte) k;
b+=1;
}
return new Object[] {i, byteArr}; // <<---
}
我不知道如何从Object []获取我的整数和字节数组:
Object Object;
Object = Protocol.readVarInt(serv_input);
int intLength = Object[0]; // <<---
byte[] byteArray = Object[1]; // <<---
这行不通,因为它认为它是数组,但是它是对象...
(很抱歉,我的知识不足,我是Java新手...)
您可以使用类型转换从Object[]
获取数据
int intLength = (int) result[0];
byte[] byteArray = (byte[]) result[1];
但我建议使用包装对象而不是Object[]
作为方法的结果:
class Result {
private final int length;
private final byte[] byteArr;
Result(int length, byte[] byteArr) {
this.length = length;
this.byteArr = byteArr;
}
public int getLength() {
return length;
}
public byte[] getByteArr() {
return byteArr;
}
}
public static Result readVarInt(DataInputStream in) throws IOException {
...
return new Result(i, byteArr);
}
....
Result result = readVarInt(serv_input);
int intLength = result.getLength();
byte[] byteArray = result.getByteArr();
还应注意,这部分byteArr = Arrays.copyOf(byteArr, b);
在执行的第一步中返回NPE,因为您试图从null
复制数据。
您可以做的是使用instanceof
测试您要访问的对象是否属于特定类,然后显式转换对象。
if (test[0] instanceof Integer) {
intLength = (Integer) test[0];
}
if (test[0] instanceof byte[]) {
byteArray = (byte[]) test[0];
}
但是,我不建议这样做,因为我倾向于不将内容存储在Object中,因为您永远都不知道它们是哪个类。
也许您应该尝试将数据存储在Map中,该Map以您要计算的长度作为键,而将字节数组作为值。
Map<Integer, byte[]> result = new HashMap<>();
result.put(i, byteArray);
要注意的一件事是,映射的键不能是整数,而只能是整数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.