자바
java millisecond (long) to Base64 string 변환 방법
du.study
2021. 9. 19. 01:38
728x90
나름 중복이 덜 발생하면서, 일렬번호를 만들되, 짧게 만들 수 있는 방법이 어떤것이 있을가 찾아보던 도중, millisecond를 Base64 String 으로 만들면 어떨까 하는 생각이 들어, 해당방식을 찾아 작성합니다.
우선 사용한 모듈은 다음과 같습니다.
dependencies{
implementation("commons-codec:commons-codec:1.5")
}
해당 모듈에서 Base64.encodeBase64URLSafeString 을 사용하기 위함입니다.
아래코드는 전체 플로우를 나타낸 코드입니다.
public static byte[] longToByte(Long x){
ByteBuffer buffer = ByteBuffer.allocate(java.lang.Long.BYTES);
buffer.putLong(x);
return buffer.array();
}
public static Long byteToLong(byte[] bytes){
ByteBuffer buffer = ByteBuffer.allocate(java.lang.Long.BYTES);
buffer.put(bytes);
buffer.flip();
return buffer.getLong();
}
public static void main(String[] args) {
Long now = LocalDateTime.now().atZone(ZoneId.of("UTC")).toInstant().toEpochMilli();
System.out.println(now);
String convertTimeToString = Base64.encodeBase64URLSafeString(longToByte(now));
System.out.println(convertTimeToString);
Long rollbackStringToLong = byteToLong(Base64.decodeBase64(convertTimeToString));
System.out.println(rollbackStringToLong);
}
코드를 보면 현재 millisecond를 받아서 String으로 바꾸는 작업이 있고, 이 값을 다시 Long값으로 변경하는 로직이 있습니다.
이 작업을 핵심적으로 해주는 부분이 longToByte, byteToLong method이며, commons-codec:commons-code 를 통해서 Url safe한 String 으로도 encode, decode가 가능하게 됩니다.
728x90