아파치 라이브러리를 사용하면 객체를 쉽게 직렬화/역직렬화 할 수 있습니다.

*주의 : 직렬화 할 객체는 반드시 implements Serializable 해 준 상태여야 합니다.


직접 만든 객체를 한 줄로 직렬화 해 봅시다.

byte[] data = SerializationUtils.serialize(yourObject);


역직렬화도 한 줄로 해 봅시다.

YourObject yourObject = (YourObject) SerializationUtils.deserialize(byte[] data)


안드로이드 스튜디오에서 아파치 라이브러리를 사용하려면,

인터넷이 연결된 상태에서 build.gradle의 dependencies에 아래와 같이 한 줄 추가해 주고 sync 하면 됩니다.

compile 'org.apache.commons:commons-land3:3.4'


라이브러리의 라이센스는 아파치 2.0. 따라서 출처 표기 후 상업적 이용도 가능하며,

아파치 라이브러리에는 각종 변환수식이나 프로토콜 관련해서 좋은 유틸이 많으므로 유용하게 사용합시다.


참고 : https://stackoverflow.com/questions/2836646/java-serializable-object-to-byte-array

Posted by 안드로메다에서 온 프로그래머

간단하게 텍스트 파일에 아래와 같은 CPU,RAM,메인보드 정보가 있다고 해보자

101 Intel i3 110000
102 Intel i5 200000

201 DDR3 4G 40000
202 DDR3 8G 80000

301 ASRock B85M 80000
302 ASUS H87 130000

item.txt

 

파일 오픈을 해보자!

 

try {  //예외 처리는 기본으로 해 줘야 한다

//파일에서 스트림을 통해 주르륵 읽어들인다

BufferedReader in = new BufferedReader(new FileReader("item.txt"));

 

//요 s에다가 한 줄씩 읽어 올거다

String s;

  

//반복한다! 언제까지? s에 앞서 읽어온 in이라는 문자 스트림에서 한 줄을 읽어 오는게 실패할 때까지!

while ((s = in.readLine()) != null) {

//그렇게 한 줄 가져와서.. 스플릿으로 조각조각 내 준다. 파싱 기준은 공백인 \t 로 하자

String[] split = s.split("\t");

 

//아래 변수들은 클래스에 선언되어 있음을 가정한다

modelcode = Integer.valueOf(split[0]); //첫째 조각은 모델 코드에
modelname = split[1]; //둘째 조각은 모델 네임에
modelprice = Integer.valueOf(split[2]);//셋째 조각은 모델 가격에 입력한다

 

 //전제조건

 //list는 ArrayList이다, Model은 컴퓨터 부품을 저장할 붕어빵 트....ㄹ 이 아니고 클래스다

 

 //그 후 적절한 리스트나 자료구조에 투입한다!

      list.add(new Model(modelcode, modelname, modelprice));

      }

      //다 뽑아먹었으니 버퍼리더를 닫아 준다.
      in.close();
      } catch (IOException e) {

  //혹시 입출력 에러가 발생했다면 어떤 에러인지 출력하고 끄자.

  System.err.println(e);

  System.exit(1);

}

 

결과적으로 list라는 ArrayList에 Model이란 클래스 구조로 txt파일 내용이 들어갔다!

해피엔딩

 

 

Posted by 안드로메다에서 온 프로그래머

오늘 내 30분을 잡아먹은 상황에 대한 대처법을 포스팅하려 한다

 

jdk를 막 설치했거나 설치하고 나서 잘 사용하던 도중

cmd창에서 java 명령어나 java -version 명령어는 잘 먹히는데, javac 명령어만 안 먹힐 때가 있다.

다른 증상으로는 잘 돌아가던 이클립스나 안드로이드 스튜디오에서 JAVA_HOME관련 에러를 뿜기도 한다

 

증상이 발생했다면 환경변수 path를 살펴보자, 중간에 못 보던 게 있다

C:\ProgramData\Oracle\Java\javapath;

오라클 DB를 설치하다 생긴건지.. 이 경로가 추가된 원인은 잘 모르겠으나,

경로로 들어가 보면 java , javaw, javaws의 바로가기만 덜렁 있다.

요놈이 최상위 경로로 들어가서 %JAVA_HOME% 의 내용물을 찾질 않는 문제인 것이다

 

그냥 path에서 저 C:\ProgramData\Oracle\Java\javapath; 를 지워주고,

해당 프로그램이나 cmd를 재시작하면 잘 된다.

원래 프로그램에도 별 영향 없을 듯, 어차피 새로운 path인 %JAVA_HOME%이 상위 호환이기에.

 

 

Posted by 안드로메다에서 온 프로그래머

이클립스 콘솔에서 한글이 깨지는 경우가 있다

예를 들어 Scanner로 입력을 받았을때

 

그것의 대처법이다

 

이클립스 설치 폴더에서

eclipse.ini 파일을 열어주고,

맨 아랫줄에

-Dfile.encoding=UTF-8

를 추가해 주면 된다

 

물론 이클립스 자체가 영어권 프로그램이므로

한글로 콘솔 입력을 받는것은 추천하지 않는다.

이것 이외에도 각종 에러가 많기 때문

 

Posted by 안드로메다에서 온 프로그래머

자바에서 문자열 내의 특정 문자열을 찾아 바꾸고 싶은 경우가 있다


안녕하세요<P>?
안녕하세요?
로 바꾸고 싶다거나

안녕하세요 누구누구?
로 바꾸고 싶을 수 있다
그럴때 replaceAll을 사용하면 된다

String ss = "안녕하세요<P>?";
String str;
String name = "김길동";

str = ss.replaceAll("</P>","");
//안녕하세요?

str = ss.replaceAll("</P>",name);
//안녕하세요 김길동?

주의해야 할 점이 있다 .
 *,[,]등의 정규 표현식은 아래와 같이 입력해줘야 한다

 [ ] 로 감싸면 인식하는 것들

*  → [*]
+  → [+]
$  → [$]
|  → [|]
?  → [?]
 \\를 붙이면 인식하는 것들

( → \\(
) → \\)
{ → \\{
} → \\}
^ → \\^
[ → \\[
] → \\]

자바의 특수문자는 \를 사용하며
아래의 문자들은 그냥 사용해도 된다
< > ; : . , ~ ' ` ! @ # % &




Posted by 안드로메다에서 온 프로그래머

자바에서 String을 Int로 바꿔보고, 반대로도 바꿔봅시다.


//int To String
int i = 100;
String stringCase1 = String.valueOf(i); //방법 1, i가 null 일 시 null 리턴
String stringCase2 = Integer.toString(i); //방법 2, i가 null 일 시 NullPointerException발생

//String to int
String str = "100";
int intCase1 = Integer.parseInt(str); //방법1, 양수와 음수 모두 인식 가능
int intCase2 = Integer.valueOf(str); //방법2, 양수만 변환 가능(내부에 parseInt가 있음.)



Posted by 안드로메다에서 온 프로그래머

//array에 2013년1월1일 이 들어있습니다


String [] array = arrdate.split("년|월|일");

//arrdate에 들어있는 값을 , 년 월 일로 잘라 array[]에 넣습니다


  int year = Integer.parseInt(array[0]);

  int month = Integer.parseInt(array[1]);

  int day = Integer.parseInt(array[2]);

//array에 있는 값을 년,월,일에 대입해 줍니다


참 쉽죠?




Posted by 안드로메다에서 온 프로그래머