Я пытаюсь преобразовать массив double [] в строку Base64 и наоборот. Я хочу сделать это для хранения очень длинного массива двойных массивов (double [] []) в простой строке и затем вернуться к двойному массиву [] []. Возможно ли это?Как преобразовать двойной массив в строку Base64 и наоборот в Java
Это мой текущий код для проверки преобразования между байтовым массивом и базой. Конечно, не работает:
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Main {
public static void main(String[] args) {
double[] testArray = {170.56, 43.78, 674.0};
String encodedTest = encodeLocation(testArray);
System.out.println(encodedTest+"\n");
double[] decodedTest = decodeLocation(encodedTest);
for(Double d: decodedTest)
System.out.println(d);
}
private static String encodeLocation(double[] doubleArray){
byte[] bytes = doubleToByteArray(doubleArray);
String base64Encoded = new String(bytes, StandardCharsets.UTF_8);
return base64Encoded;
}
private static double[] decodeLocation(String base64Encoded){
byte[] bytes = Base64.getEncoder().encode(base64Encoded.getBytes());
double[] doubleArray = byteToDoubleArray(bytes);
return doubleArray;
}
private static byte[] doubleToByteArray(double[] doubleArray){
int times = Double.SIZE/Byte.SIZE;
byte[] bytes = new byte[doubleArray.length * times];
for(int i=0;i<doubleArray.length;i++){
ByteBuffer.wrap(bytes, i*times, times).putDouble(doubleArray[i]);
}
return bytes;
}
private static double[] byteToDoubleArray(byte[] bytes){
int times = Double.SIZE/Byte.SIZE;
double[] doubles = new double[bytes.length/times];
for(int i=0;i<doubles.length;i++){
doubles[i] = ByteBuffer.wrap(bytes, i*times, times).getDouble();
}
return doubles;
}
}
Выход:
@[email protected]??
[email protected]?
3.541909365425625E83
3.052647263964711E103
1.1233976318184827E79
2261634.5098039196
Если вы просто хотите, чтобы сохранить память, проверьте, чтобы увидеть, если ваши значения могут быть сохранены точно в плотах. Вы сократили бы объем использования памяти вдвое. double = 8 bytes, float = 4 байта – holycatcrusher
, если вы пытаетесь проанализировать свой массив на Base64, я думаю, что есть более эффективные подходы к сериализации данных, например, реализация Serializable –
Ваш 'encodeLocation' не имеет ничего общего с Base64. –