프로젝트 중 문자 전송 관련하여 개발했을 때,

 

문자 내용 길이에 따라, SMS/LMS/MMS 기준으로 전송해야할 때가 있었다.

 

웹 검색 중 Byte 계산에 대한 1byte, 2byte 등 기준이 애매한게 많았다.

 

숫자, 영문, 띄어쓰기, 줄바꿈 등은 1byte

 

한글, 특수문자 등은 2byte로 계산하는것을 작성하였고, 추후에 필요할까 싶어 기록해놓는다.

 

public static int getByteLength(String str) {
    int bytes = 0;
    if (str == null) {

        return bytes;

    } else {

        char[] strChar = str.toCharArray();
        char ch; int code;

        for (int i = 0; i < strChar.length; i++;) {
            ch = strChar[i];
            code = (int) ch;

            // 2bytes
            if ((ch < '0' || ch > '9') && (ch < 'A' || ch > 'Z') && code > 255) bytes += 2;
            // 1bytes
            else bytes +=1;
        }

        return bytes;

    }
}

 

 

Byte 계산 (영문, 숫자, 공백 = 1byte, 그 이외 한글, 한문, 특수문자 등 = 2byte)

 

import com.fasterxml.jackson.core.type.TypeReference;

import com.fasterxml.jackson.databind.ObjectMapper;

 

private final static ObjectMapper objectMapper = new ObjectMapper();

 

/**
 *
 * 어떤 특정한 Json String 값을 TypeReference<T>로 번형
 *
 * @param HttpServletRequest request, String jsonKey, TypeReference<T> typeReference
 * @return Map<String, Object>
 * @throws Exception
 **/

public static <T> T convertJsonToObject(String jsonStr, TypeReference<T> typeReference) throws Exception {
    return objectMapper.readValue(jsonStr, typeReference);

}

package -;


import java.io.UnsupportedEncodingException;

import java.security.GeneralSecurityException;

import java.security.Key;

import java.security.NoSuchAlgorithmException;


import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;


import org.apache.commons.codec.CharEncoding;

import org.apache.commons.codec.binary.Base64;


/**

 * 

 * 양방향 AES256 암호화 

 * 사용하는 곳 마다 암호화 키가 다를 수 있으므로

 * 그 때마다 생성자로 키에 따른 암호화 알고리즘을 생성한다.

 *

 */


public class {



}

우선 프로젝트의 중간 참여자로서 ( 메뉴 가지치기 추가 ) 기존 사용하던 HttpSession 객체가 있었다.


내가 이용하고자 하는 정보는... 로그인 유저의 정보를 이용해, 다른정보를 가져오는 것이었다.


근데 중간 참여자로서 물어볼 사람도 없고, 물어봐도 원하는 대답들이 아니었다.


Session으로 넘어온 정보들을 나열해서 볼 수 있다면.... 원하는 정보를 찾아 이용할 수 있겠는데


찾아보던중 Enumeration을 이용하여 가져오는것이었다.


// Enumeration에 session의 속성정보를 담아 Key를 추출한 다음 해당 Value를 찾아오는 것이었다.

Enumeration<String> enum_session = session.getAttributeNames();

while(enum_session.hasMoreElements()) {

String key = enum_session.nextElement();

Logger.info("key --> " + key);

}


처음에는 

String Key = enum_session.nextElement(); 로 하여

String Value = session.getAttribute(key); 로 하였으나 Cast 오류가 나는것이었다.


HttpSession 에 Key는 스트링으로 가지고 있지만


Value는 다양한 형태의 Object가 있어 오류가 나는것이었다.


결국엔 Key를 나열하여 해당하는 Value의 형태로 Cast를 후 처리하였다.


역시 가장 기본적인 예외사항을 체크하지 않은것을 반성해야겠다.


개발엔 정해져 있는게 아닌것을....

+ Recent posts