이중 [] 배열을 Base64 문자열로 변환하려고합니다. 그 반대의 경우도 마찬가지입니다. 간단한 배열에서 매우 긴 배열의 double 배열 (double [] [])을 저장하고 double [] [] 배열로 돌아가고 싶습니다. 가능합니까?Java에서 double 배열을 Base64 문자열로 변환하는 방법 (
바이트 배열과 Base64 문자열 사이의 변환을 테스트하는 현재 코드입니다. 물론 작동하지 않습니다
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 bytes – holycatcrusher
배열을 Base64로 구문 분석하려고한다면, Serializable을 구현하는 것과 같이 데이터를 직렬화하는 더 나은 접근법이 있다고 생각한다. –
'encodeLocation'은 Base64와 아무 관련이 없다. –