Java

[Java] char[]에서 byte[]로, byte[]에서 char[]로 변환하기

메바동 2022. 5. 12. 11:28
728x90

지난번 글에서 char array에서 byte array로 변환하는 법을 대충 stack overflow에서 찾아 사용했다고 글을 썼는데, 해당 내용을 블로그에 정리한 뒤 다음에 ByteBuffer와 CharBuffer에 대해서 제대로 정리해 봐야겠다는 생각이 들었다.

 

 

 

char[]에서 byte[]로 변환하기

// Buffer를 사용하여 변환하기
private static byte[] toBytesUseBuffer(char[] chars) {
    if (chars == null) return null;
    CharBuffer charBuffer = CharBuffer.wrap(chars);
    ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(charBuffer);
    byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit());
    // 민감 정보 지우기
    Arrays.fill(byteBuffer.array(), (byte) 0);
    return bytes;
}

// Buffer를 사용하지 않고 변환하기
private static byte[] toBytesWithoutBuffer(char[] chars) {
    if (chars == null) return null;
    byte[] byteArray = new byte[chars.length];
    for (int i = 0; i < chars.length; i++) {
        byteArray[i] = (byte) chars[i];
    }
    return byteArray;
}

 

위에 있는 함수는 Buffer를 사용하여 변환하는 방법이고, 아래 있는 함수는 Buffer를 사용하지 않고 변환하는 방법이다.

 

Buffer를 사용할 때, 민감 정보를 다룰 경우 Arrays.fill() 또는 반복문을 사용하여 안에 있는 내용을 0으로 덮어씌워 주는 것이 좋다.

 

 

 

byte[]에서 char[]로 변환하기

// Buffer를 사용하여 변환하기
private static char[] toCharsUseBuffer(byte[] bytes) {
    if (bytes == null) return null;
    ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
    CharBuffer charBuffer = StandardCharsets.UTF_8.decode(byteBuffer);
    char[] chars = Arrays.copyOfRange(charBuffer.array(), charBuffer.position(), charBuffer.limit());
    // 민감 정보 지우기
    Arrays.fill(charBuffer.array(), '\u0000');
    return chars;
}

// Buffer를 사용하지 않고 변환하기
private static char[] toCharsWithoutBuffer(byte[] bytes) {
    if (bytes == null) return null;
    char[] chars = new char[bytes.length];
    for (int i = 0; i < bytes.length; i++) {
        chars[i] = (char) bytes[i];
    }
    return chars;
}

 

위에 있는 함수는 Buffer를 사용하여 변환하는 방법이고, 아래 있는 함수는 Buffer를 사용하지 않고 변환하는 방법이다.

 

Buffer를 사용할 때, 민감 정보를 다룰 경우 Arrays.fill() 또는 반복문을 사용하여 안에 있는 내용을 0으로 덮어씌워 주는 것이 좋다.

 

 

 

다음번에 ByteBuffer와 CharBuffer 그리고 nio에 대해서 공부한 뒤 포스팅을 남겨야겠다.

 

 

 


Reference

728x90