전체 글
-
서버와 클라이언트간 Object 스트림을 이용해서 통신할 경우가 있다. 이때 스트림 생성 순서에 주의가 필요하다. ObjectInputStream은 생성 시 Socket의 InputStream으로부터 object stream header를 읽으려고 한다. 아래 생성자에서 4바이트의 매직 시퀀스를 읽으려고 하는 부분을 살펴볼 수 있다. public ObjectInputStream(InputStream in) throws IOException { verifySubclass(); bin = new BlockDataInputStream(in); handles = new HandleTable(10); vlist = new ValidationList(); serialFilter = ObjectInputFilter...
ObjectInputStream 생성 시 주의점서버와 클라이언트간 Object 스트림을 이용해서 통신할 경우가 있다. 이때 스트림 생성 순서에 주의가 필요하다. ObjectInputStream은 생성 시 Socket의 InputStream으로부터 object stream header를 읽으려고 한다. 아래 생성자에서 4바이트의 매직 시퀀스를 읽으려고 하는 부분을 살펴볼 수 있다. public ObjectInputStream(InputStream in) throws IOException { verifySubclass(); bin = new BlockDataInputStream(in); handles = new HandleTable(10); vlist = new ValidationList(); serialFilter = ObjectInputFilter...
2019.08.07 -
아래와 같은 json 데이터를 json과 jackson을 이용해서 처리해보자. { "checkList": { "check": [ { "code": "1000", "date": "2010.10.01", "clean": "H", "ready": "H", "response": "M" }, { "code": "1001", "date": "2010.10.02", "clean": "H", "ready": "H", "response": "M", "request": "air clean!!" } ] } } 단순한 구조로 전체 map > ckeckList(map) > check(list)로 되어있으며 list안의 요소들은 다음의 java 클래스로 표현할 수 있다. import java.util.Date; public cl..
Gson과 Json을 이용한 타입 파라미터 처리아래와 같은 json 데이터를 json과 jackson을 이용해서 처리해보자. { "checkList": { "check": [ { "code": "1000", "date": "2010.10.01", "clean": "H", "ready": "H", "response": "M" }, { "code": "1001", "date": "2010.10.02", "clean": "H", "ready": "H", "response": "M", "request": "air clean!!" } ] } } 단순한 구조로 전체 map > ckeckList(map) > check(list)로 되어있으며 list안의 요소들은 다음의 java 클래스로 표현할 수 있다. import java.util.Date; public cl..
2019.08.07 -
자바 프로그래밍에서 JSON 문자열을 처리하기 위해 일반적으로 Gson 또는 Jackson 라이브러리를 사용할 수 있다. 간단하게 이 둘의 사용법을 비교해보자. 여기서 처리해볼 JSON data는 영화진흥위원회의 오픈 API이다. API의 url은 아래와 같다. http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=430156241533f1d058c603178cc3ca0e&targetDt=20120101 전체 데이터 중 관심있는 부분은 bookOfficeResult > dailyBoxOfficeList에 배열 형태로 들어있는 영화 정보이다. 다음은 영화 정보를 가지고 있을 자바 객체이다...
JSON 문자열 처리자바 프로그래밍에서 JSON 문자열을 처리하기 위해 일반적으로 Gson 또는 Jackson 라이브러리를 사용할 수 있다. 간단하게 이 둘의 사용법을 비교해보자. 여기서 처리해볼 JSON data는 영화진흥위원회의 오픈 API이다. API의 url은 아래와 같다. http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=430156241533f1d058c603178cc3ca0e&targetDt=20120101 전체 데이터 중 관심있는 부분은 bookOfficeResult > dailyBoxOfficeList에 배열 형태로 들어있는 영화 정보이다. 다음은 영화 정보를 가지고 있을 자바 객체이다...
2019.08.07 -
소켓을 이용해서 원격지로 파일 전송하는 애플리케이션 작성 중 깜빡 잘못된 생각으로 오류에 빠졌던 내용을 정리하고 개선된 소스를 작성해본다. 처음 생각한 스트림의 구조는 아래와 같다. 서버의 파일을 FileInputStream으로 읽어와서 소켓에 기반한 BufferedOutputStream으로 클라이언트로 출력하고 클라이언트는 역시 소켓에 기반한 BufferedInputStream으로 읽은 후 FileOutputStream으로 로컬 파일에 출력한다. 이에 대한 서버와 클라이언트의 코드는 각각 아래와 같다. public class ServerFile { public static void main(String[] args) { try (ServerSocket ss = new ServerSocket(6547))..
Socket을 통한 binary 파일 전송. 잠깐의 잘못된 생각과 정리소켓을 이용해서 원격지로 파일 전송하는 애플리케이션 작성 중 깜빡 잘못된 생각으로 오류에 빠졌던 내용을 정리하고 개선된 소스를 작성해본다. 처음 생각한 스트림의 구조는 아래와 같다. 서버의 파일을 FileInputStream으로 읽어와서 소켓에 기반한 BufferedOutputStream으로 클라이언트로 출력하고 클라이언트는 역시 소켓에 기반한 BufferedInputStream으로 읽은 후 FileOutputStream으로 로컬 파일에 출력한다. 이에 대한 서버와 클라이언트의 코드는 각각 아래와 같다. public class ServerFile { public static void main(String[] args) { try (ServerSocket ss = new ServerSocket(6547))..
2019.08.05 -
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWLL7kaaAPsDFAUW&categoryId=AWLL7kaaAPsDFAUW&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.HashMap; import java.util.Map; ..
4261. 빠른 휴대전화 키패드https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWLL7kaaAPsDFAUW&categoryId=AWLL7kaaAPsDFAUW&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.HashMap; import java.util.Map; ..
2019.08.05 -
다음의 무거운 작업을 수행해야한다고 생각해보자. public long heavyWork(int th) { long result = 1; for (int i = 0; i < Integer.MAX_VALUE; i++) { result += i; } System.out.printf("%d th done: %d\n", th, result); return result; } 위의 작업을 총 10번 해서 총 결과를 알고 싶다면 아래와 같이 작업할 수 있다. public void getSumByNormal() { long first = System.currentTimeMillis(); long result = 0; for (int i = 0; i < 10; i++) { result += heavyWork(i); } l..
Thread의 join 사용 예다음의 무거운 작업을 수행해야한다고 생각해보자. public long heavyWork(int th) { long result = 1; for (int i = 0; i < Integer.MAX_VALUE; i++) { result += i; } System.out.printf("%d th done: %d\n", th, result); return result; } 위의 작업을 총 10번 해서 총 결과를 알고 싶다면 아래와 같이 작업할 수 있다. public void getSumByNormal() { long first = System.currentTimeMillis(); long result = 0; for (int i = 0; i < 10; i++) { result += heavyWork(i); } l..
2019.08.03 -
이클립스를 이용해서 블럭 주석을 작성하다보면 매 라인마다 *가 삽입되서 나중에 지우기 번거로운 경우가 발생한다. /* * List sub = list.subList(3, 5); * System.out.println("sub의 내용: "+sub); * System.out.println("sub의 내용을 다 가지고 있는가? " + list.containsAll(sub)); */ 중간의 *를 제거하기 위해서는 [Window -> Preferences -> Java -> Code Style -> Formatter -> 사용자별 Activie Profile 선택 -> Edit -> comments -> Enable block comment formatting을 체크 해지한다. /* List sub = list.s..
[eclipse] formatting: 블럭 주석 시 다중 * 제거이클립스를 이용해서 블럭 주석을 작성하다보면 매 라인마다 *가 삽입되서 나중에 지우기 번거로운 경우가 발생한다. /* * List sub = list.subList(3, 5); * System.out.println("sub의 내용: "+sub); * System.out.println("sub의 내용을 다 가지고 있는가? " + list.containsAll(sub)); */ 중간의 *를 제거하기 위해서는 [Window -> Preferences -> Java -> Code Style -> Formatter -> 사용자별 Activie Profile 선택 -> Edit -> comments -> Enable block comment formatting을 체크 해지한다. /* List sub = list.s..
2019.08.03 -
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV4yLUiKDUoDFAUx&categoryId=AV4yLUiKDUoDFAUx&categoryType=CODE&&& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.StringTokenizer; // TODO: ht..
1824. 혁진이의 프로그램 검증https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV4yLUiKDUoDFAUx&categoryId=AV4yLUiKDUoDFAUx&categoryType=CODE&&& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.StringTokenizer; // TODO: ht..
2019.08.02