gpt4 book ai didi

java - 将 double 组转换为字节数组 : What is the Java way of C# Buffer. BlockCopy?

转载 作者:行者123 更新时间:2023-12-01 18:30:55 26 4
gpt4 key购买 nike

我需要在 Java 中将 double 组序列化为 base64。我有以下 C# 方法

public static string DoubleArrayToBase64( double[] dValues ) {
byte[] bytes = new byte[dValues.Length * sizeof( double )];
Buffer.BlockCopy( dValues, 0, bytes, 0, bytes.Length );
return Convert.ToBase64String( bytes );
}

如何在 Java 中做到这一点?我试过了

Byte[] bytes = new Byte[abundaceArray.length * Double.SIZE];
System.arraycopy(abundaceArray, 0, bytes, 0, bytes.length);
abundanceValues = Base64.encodeBase64String(bytes);

但是这会导致 IndexOutofBoundsException。

如何在 Java 中实现此目的?

编辑:

Buffer.BlockCopy 在字节级别进行复制,最后一个参数是字节数。 System.arraycopy 最后一个参数是要复制的元素数量。所以是的,它应该是 abundaceArray.length,但随后会抛出 ArrayStoreException。

编辑2:

base64字符串必须与c#代码创建的ine相同!

最佳答案

当方法上的数组类型不是相同的基元时,您会收到 ArrayStoreException,因此 double 到 byte 将不起作用。这是我修补的一个似乎有效的解决方法。我不知道 java 核心中有任何方法可以自动从原始数据 block 转换为字节 block :

public class CUSTOM {
public static void main(String[] args) {
double[] arr = new double[]{1.1,1.3};
byte[] barr = toByteArray(arr);
for(byte b: barr){
System.out.println(b);
}
}
public static byte[] toByteArray(double[] from) {
byte[] output = new byte[from.length*Double.SIZE/8]; //this is reprezented in bits
int step = Double.SIZE/8;
int index = 0;
for(double d : from){
for(int i=0 ; i<step ; i++){
long bits = Double.doubleToLongBits(d); // first transform to a primitive that allows bit shifting
byte b = (byte)((bits>>>(i*8)) & 0xFF); // bit shift and keep adding
int currentIndex = i+(index*8);
output[currentIndex] = b;
}
index++;
}
return output;
}
}

关于java - 将 double 组转换为字节数组 : What is the Java way of C# Buffer. BlockCopy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24263713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com