Search results for '2010/07'

Java 6u21 과 이클립스

최근에 오라클에서 Java 6 update 21 을 발표했습니다. 이번 버전에서 java.dll의 변경된 사항으로 인해 이클립스 구동에 영향을 미치게 되었다고 합니다.

변경 사항은 JDK의 개발사 정보를 기존 "Sun Microsystems, Inc." 에서 "Oracle Corporation" 으로 수정한 것인데요 이클립스의 경우 Sun JRE 에 있는 non-standard 실행 옵션 중의 하나인 -XX:MaxPermSize 적용 가능 여부를 java.dll의 제조사 정보 문자열의 "Sun Microsystems"로 구분하고 있다고 하네요. 실제로  -XX:MaxPermSize 옵션을 지원하지 않는 몇몇 JVM에 해당 옵션을 적용하면 이클립스 구동이 실패한다고 합니다. 이클립스 런처는 Windows에서 실행되는 SUN VM인 경우 자동으로 -XX:MaxPermSize=256m 옵션을 적용한다고 하네요.

JVM 의 Vendor 정보를 변경한 것으로 영향을 받는것은 비단 이클립스 뿐만이 아닐겁니다.
http://www.excelsior-usa.com/blog/excelsior-jet/apps-will-stop-working-under-oracle-jre/ 에서와 같이 System.getProperty("java.vm.vendor") 값으로 무언가를 처리하는 모든 어플리케이션이 영향을 받을 수 있습니다.

JAVA가 Oracle의 자산이 된 이상 개발사 정보를 변경하는 것을 뭐라고 할 순 없지만 기존에 개발된 어플리케이션에 미치는 영향을 생각한다면 오라클이 어떤식으로든 액션을 취하지 않으면 안될것 같습니다. Java 6u21에서 이클립스 구동이 실패한다면 당분간은 JDK를 Java 6u20으로 다운그래이드 해야할 듯 합니다.
2010/07/30 00:53 2010/07/30 00:53
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

최저생계비로 황제 부럽지 않은 식사를....?

차 의원님은 벌써 해탈의 경지에 가 계신가 봅니다.... 난 현실 세계를 사는 범인이라 그런지 의원님의 사고를 도저히 쫓을 수가 없네...

6,300원짜리 황제의 삶

최저생계비로 하루나기 체험에 다녀왔습니다. 식사비 6,300원을 받고 쪽방에서 1박2일을 살아보는 겁니다. 저보다 앞서서 몇 분이 다녀갔지만 한나라당 의원은 제가 처음이었습니다.

선배 경험자의 가계부를 조사했습니다.

한 컵에 800원 하는 쌀 두 컵에 1,600원, 김치 한 보시기 2,000원, 참치 캔 한 개 2,000원, 생수 한 병에 500원, 이렇게 해서 모두 6,100원이 들었답니다. 받은 돈 전부를 착실히 먹거리에 썼군요. 쌀은 주최 측에서 제공하는 걸 샀고 부식은 근처 구멍가게에서 샀답니다.

전 다르게 접근했습니다.

제가 굶어죽을까 염려한 집사람이 인터넷에서 조사한 자료를 참조했습니다. 쌀은 800원어치 한 컵만 샀습니다. 그리고 마트에서 세일하는 쌀국수 1봉지 970원, 미트볼 한 봉지 970원, 참치캔 1개 970원에 샀습니다. 전부 합해 3,710원. 이정도면 세끼 식사용으로 충분합니다. 점심과 저녁은 밥에다 미트볼과 참치캔을 얹어서 먹었고 아침식사는 쌀국수로 가뿐하게 때웠지요. 아참! 황도 970원짜리 한 캔을 사서 밤에 책 읽으면서 음미했습니다. 물은 숙소에 도착하자마자 수돗물을 한 양재기 받아서 끓여 놓았지요. 이 정도면 황제의 식사가 부럽지 않지요.

나머지 돈으로 뭐 했냐구요? 반납하지 않고 정말 의미있게 썼습니다.

먹거리로 쓴 돈 4,680원을 빼니까 1,620원이 남더군요.

그중에서 1,000원은 사회에 기부했습니다. 체험 내용 중에 쪽방촌 사람들 도우는 일이 있는데 제가 만난 사람은 1급 시각장애자였습니다. 언제부터인지 모르겠으나 1평짜리 골방에 박혀 매일 술로 지새웠습니다. 그 분을 부축하고 동사무소에 도움을 신청하러 가는데 인사불성에 속이 불편한 지 계속 꺼억댔습니다. 약방에 가서 제 돈 1,000원을 내고 속 푸는 약을 사드렸습니다. 집에 돌아가서는 걸레를 물에 빨아 방 청소를 해드렸는데 이불을 들자 바퀴벌레 수십 마리가 혼비백산 달아나더군요. 바퀴벌레 알도 쓸어내고 청소를 마친 다음에 젖은 수건으로 온몸을 닦아 드렸습니다. 기분 좋은 지 살짝 웃더군요.

하루밤을 잘 자고 난 다음날 아침 주변을 산책했습니다. 돌아오면서 조간신문 1부를 600원에 샀습니다. 문화생활을 한 셈이죠. 마지막으로 남은 돈은 20원이었습니다.

나는 왜 단돈 6,300원으로 황제와 같은 생활을 할 수 있었을까? 밥 먹으라고 준 돈으로 사회기부도 하고 문화생활까지 즐겼을까? 물가에 대한 좋은 정보와 마음껏 돌아다닐 수 있는 건강이 있었기 때문입니다. 최저생계비로 하루하루를 살아가는 분들이 저처럼 될 수 있을까요? 단 하루 체험으로 섣부른 결론 내리는 것은 옳지 않겠지요. 다만 최저생계비만 올리는 것으론 답이 안 나올 것 같습니다. 국가재정에도 한계가 있고요.

좋은 방법이 없을까요?

http://www.chachacha.or.kr/pierce/sub01.htm?ptype=view&idx=6282

2010/07/27 03:12 2010/07/27 03:12
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

InputStream.read()

제가 만든 서버에서 보낸 데이터가 xml 형식으로 바이트 스트림으로 해서 받는데 in.read로 받았더니 byte 버퍼에 태그단위로 하나씩 들어가는데다가 디버그해봤더니 in.read라는 문장은 받은 xml 태그 수만큼 반복해서 실행되고 전체 xml을 받아서 파싱하려고 Stringbuffer를 이용해서 append 하려고 했더니 이것도 안되네요..

안녕하세요 질문자님.
질문 내용을 제가 정확히 이해한 건진 모르겠습니다만 제가 이해한 내용은
보내는 서버 측에서는 예를 들어, "<tag>내용</tag>" 스타일의 문자열을  byte[]로 변환하여
outputStream.write( byte[] );
하고 있고 클라이언트 측에서는
[code]
while ((readLength = inputStream.read(input, 0, input.length)) != -1) {
    stringBuffer.append(  new String( input )  );
}
[/code]
과 같은 동작을 하고 있다고 생각이 됩니다.

질문 내용 중 ' in.read라는 문장은 받은 xml 태그 수만큼 반복해서 실행되고' 라고 하신 걸로 미루어보아 데이터는 정상적으로 들어오고 있다고 판단됩니다. 받은 데이터를 가공하는데 어려움을 느끼고 계신 건 아닌가 하는 생각이 드네요.

우선 작성하신 클라이언트 쪽이 서버에서 보내주는 xml을 다 받으면 while 문을 빠져 나오는지 확인해 보시고요. 정상적으로 while문을 빠져 나온다면 유입된 Data를 가공하는 문제가 될 거고 그렇지 않다면 서버 측의 outputStream 에 write() 하는 부분을 확인하셔서 stream을 확실히 끝내고 있는지 확인하셔야 할 것 같습니다.

참고로 제가 작성한 소스를 첨부합니다.
첨부한 소스는 xml 형식의 문서를 읽어들여 byte 형식으로 전송하여 수신부에서 file과 문자열로 복원하는 코드가 작성되어 있습니다. Server.java 와 Client.java 는 일반적인 자바 bolocked Socket 프로그래밍 방식을 취하고 있습니다. 실제로 확인해야 하는 부분은 ByteArrayTransporter 클래스에서 클라이언트에 Data를 전송하는 부분과 Client 클래스에서 java.nio.ByteBuffer 를 이용하여 입력 데이터를 처리하는 부분 정도가 될 거 같습니다.



ByteArrayTransporter.java
[code]
   byte[] byteArray = new byte[1024];
   int readLength = 0 ;
   while ( (readLength = fileInStream.read(byteArray, 0, byteArray.length) ) != -1 ){
     out.write(byteArray, 0, readLength);
   }
   out.flush();
   out.close();  //<-- 스트림 끝내기
[/code]

Client.java
[code]   ByteBuffer bBuffer = ByteBuffer.allocate(102400);
   while ((readLength = bin.read(input, 0, input.length)) != -1) {   //byteBuffer에 byte[] 쓰기
      bBuffer.put(input, 0 ,readLength );
   }   //ByteBuffer 에 담긴 문자열 확인
   System.out.println( new String(bBuffer.array() , "UTF-8" ) );
[/code]

2010/07/20 19:54 2010/07/20 19:54
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 다른 문제로 구글링하다가 들리게 되었는데, 좋은 글 잘 읽었습니다.

    이 페이지에 어울리지 않을지는 모르나 도움을 주실 수 있을 듯하여 한 가지 질문 드리겠습니다.

    <질문> 삼성 갤럭시폰에서 파일도 존재하고 파일크기도 0이 아닌데 FileNotFoundException 에러 나타나는 문제

    구글링해도 제 힘으로 답을 구하지 못해 도움을 청합니다.

    도와주시면 정말로 감사하겠습니다.

    1. 테스트 환경 : 폰(삼성 갤럭시S3/갤럭시S5), 파일(MMS에 첨부된 .vcf 주소록파일), 안드로이드 스튜디오 2.3, 윈7(64비트)

    아래 코드의 실행 결과 : "파일 OK/2025bytes/주소록 내용을 읽을 수 없습니다."

    즉 exists 메소드로 검사하면 파일도 존재하고, length 메소드로 검사하면 파일크기도 0이 아니므로 분명 존재하는 파일입니다.

    그런데 BufferedReader/readLine으로 파일을 읽으면 FileNotFoundException 에러를 내고 파일 내용을 읽지 못합니다.

    다른 테스트 폰 엘지 G2에서는 정상으로 읽힙니다.

    // 주소록 보이기
    public void viewVcf(final String filePath) {
    File vcfFile = new File(filePath);
    if (vcfFile.exists()) {
    long lFileSize = vcfFile.length();
    tv_unique.setText("파일 OK/"+lFileSize+"bytes");
    String content = readFile(filePath);
    if (content.isEmpty())
    tv_unique.setText(tv_unique.getText().toString()+"/주소록 내용을 읽을 수 없습니다.");
    else {
    ...
    }
    }
    else {
    report10sec("주소록 파일이 없습니다.");
    }
    }

    2. 테스트 환경 : 폰(삼성 갤럭시S3/갤럭시S5), 파일(MMS에 첨부된 .mp4 동영상파일), 안드로이드 스튜디오 2.3, 윈7(64비트)

    동영상 파일의 경우도 위와 비슷합니다.

    "파일 OK/707989bytes"

    // 비디오 재생
    public void viewVideo(final String filePath) {
    File videoFile = new File(filePath);
    if (videoFile.exists()) {
    long lFileSize = videoFile.length();
    tv_unique.setText("파일 OK/"+lFileSize+"bytes");
    ...
    }
    else {
    report10sec("비디오 파일이 없습니다.");
    }
    }

    위 ... 부분의 코드에 따라서 2가지 테스트 결과입니다.

    1) startActivity(intent);

    삼성폰, 엘지폰 모두 비디오가 재생되지 않습니다.

    (엘지) java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

    (삼성) java.lang.NullPointerException

    2) videoView.start();

    엘지폰에서는 정상으로 재생이 됩니다.

    삼성폰에서는 에러 로그는 없으나, "재생할 수 없는 동영상입니다./확인" 메시지가 뜨고 비디오가 재생되지 않습니다.

    읽어 주셔서 고맙습니다.

  2. Blog Icon
    김병희

    <답변> 존재하고 크기도 있는 파일의 FileNotFoundException = 권한 없음/[Android] http://blog.daum.net/andro_java/1121