자바

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