var aaa:String = "112:3121:412:43";

function checkDiv(inp:String):Boolean{
 var arr:Array = inp.split(":");
 
 if(arr.length!=4) return false;
 
 for (var s:String in arr){
  if(isNaN(arr[s])) return false;
 }
 return true;
}

trace( checkDiv(aaa) );


음... 나름대로 쓸만함 ㄷㄷ;;; 구린가 ㅎㅎ

!=4 는 인자값은 4개만 받겠다는 이야기임. => 변경하셔서 쓰면되구...
split 구분자도 자신에 입맞에 맞게끔 수정한다면 OK

1. XulBooster : http://www.xulbooster.org 로 가서 다운받은 다음 이클립스에 넣어주면 된다.
  • This version needs Eclipse 3.3 and WTP2.0 or more.

  • 2.

    TTS자료 넣는 곳
    /private/var/root/Media/TTR/

    권한주기
    /private/var/Applications/
    ex) chmod 755 /private/var/Applications/iBlackjack.app

    테마변경
    /private/var/root/Library/SummerBoard/Themes/

    'etc > old' 카테고리의 다른 글

    파싱이후 숫자 유효성 검증하는거 예시  (0) 2008.06.11
    XUL 시작하기  (0) 2008.06.10
    JDOM을 이용하여 XML 읽기 / 생성하기 예제  (1) 2008.06.03
    Java performance tips  (0) 2008.06.03
    東京 狐の嫁入  (0) 2008.06.03
    사용자 삽입 이미지


    확인해 본 이후 Javadoc을 읽어주고 수정하여 자신만의 것으로 만들어서 좀더  좋은 형태로 발전시켜 사용하기 바랍니다. 후훗, 저도 이제 소스 성능 업좀 하러 ㄱㄱ

    'etc > old' 카테고리의 다른 글

    XUL 시작하기  (0) 2008.06.10
    iPod  (0) 2008.06.09
    Java performance tips  (0) 2008.06.03
    東京 狐の嫁入  (0) 2008.06.03
    2008년 4월 신작 자막 제작자 정리표  (0) 2008.06.03


    Java Press (http://www.gihyo.co.jp/magazines/javapress) 라는 일본의  
    Java전문 서적(2003년 2월판)에서 발췌한 Java performance tips입니다.  

    그중 Java 일반적사항에 관련하여 7개, String 관련2개, Collection관련 8개,  
    IO관련2개등 총 4개 분야 19여개의 Tips에 대해 제가 나름대로 번역해본 자료입니다.  

    출처 : javaservice.net 김선필(piper2)님의 글입니다.



    ====================================================================================

    Java performance tips

    Java Press (http://www.gihyo.co.jp/magazines/javapress) 라는 일본의 Java전문 서적(2003년 2월판)에서 발췌한 Java performance tips입니다.

    그중 Java 일반적사항에 관련하여 7개, String 관련2개, Collection관련 8개, IO관련2개,
    등 총 4개 분야 19여개의 Tips에 대해 설명하겠습니다.

    1. 일반적사항 관련 Tips

        ① 쓸데없이 Cast를 남발하면 바람직하지 않음.
        
         Loop구조에서 쓸데없이 cast를 남발하면 performance를 현저히 저하시킵니다.

          예) 쓸데없이 cast를 남발한 바람직하지 않은 코드예

          for(int i=0; i<list.size(); i++)
          {
            if ( ((String)list.get(i)).indexOf('a') ! =-1)  {
            } else if(((String)list.get(i)).indexOf('b') ! =-1)  {
            } else if(((String)list.get(i)).indexOf('c') ! =-1)  {
            } else if(((String)list.get(i)).indexOf('d') ! =-1)  {
            } ...
          }

          예) 쓸데없는 cast를 제거한 좋은 코드예

          for (int i=0; i<list.size(); i++)
          {
            String value = (String)list.get(i);
            if(value.indexOf('a') ! = -1) {
            } else if ((value.indexOf('b') != -1){
            } else if ((value.indexOf('c') != -1){
            } else if ((value.indexOf('d') != -1){
            } ...
          }

        ② 쓸데없이 동기화를 행하면 바람직하지 않음
        
            同期化(Synchronized)은 높은 cost입니다. 필요가 없을 시에는 사용하지 마십시요.


        ③ 쓸데없는 인스턴스생성은 바람직하지 않음

            인스턴스수가 많지 않은 경우에는 별 문제가 되지 않겠지만, 많은 인스턴스를 생성
    하는 경우에는 performance를 현저히 저하 시키므로 주의하십시요.

            예) String 인스턴스를 2번생성한 바람직 하지 않은 코드예

              String value = new String("문자열");

            예) 개량 후 코드예

              String value = "문자열";


        ④ 필요이상으로 Wrapper클래스를 사용하면 바람직하지 않음

            Wrapper클래스(Integer, Boolean 등)을 클래스멤버로 사용하는 경우 인스턴스생성
    이 필요하게 되므로, 기본적으로 Primitive형을 사용하는 편이 performance를 높
    입니다.

            예) Wrapper클래스를 사용한 코드예

            public class Person {

              private Integer id;
              private Boolean isValid;
            };

            예) primitive형으로 치환한 코드예

            public class Person {

              private int id;
              private boolean isValid;
            };  

            또한 Wrapper클래스에는 없지만 java.math.BigDecimal 클래스는 Double 클래스
    보다 정확한 부동소수연산이 가능하지만 performance를 저하시키므로 유의바랍니
    다.

        ⑤ primitive형의 default값을 이용

    int 형 boolean형등의 primitive형은 선언시 default값이 초기화 됩니다. 이것을 이용하면 초기화처리를 생략할 수 있습니다. 덧붙여 말하면 int형은 0, float은 0.0, boolean형은 false로 선언시에 초기화 됩니다.

            예) primitive형의 초기화처리를 행한 코드예

            public class Person {

              private int id;
              private boolean isValid;

              public Person() {

                id = 0;
                isValid = false;
              }
            }

            예) primitive형의 default값을 이용한 코드예

            public class Person {

                private int id;
                private boolean isValid;

                public Person() {

                }
              }


        ⑥ 문자열을 숫자형으로 변환하는 방법

            문자열을 숫자형으로 변환시에 각 Wrapper클래스(Integer,Double 등)의 static 메
    소드인 parseXXX()를 이용합니다.
            valueOf()를 경유해서 XXXValue()를 실행하면 한번의 인스턴스를 생성하게 되어
    불필요한 cost를 들게 합니다.

            예) valueOf()를 이용하여 문자열을 숫자형으로 변환한 코드예

              double doubleValue = Double.valueOf("1234.56").doubleValue();
              int intValue = Integer.valueOf("123456").intValue();

            예) 개량한 코드예

              double doubleValue = Double.parseDouble("1234.56");
              int intValue = Integer.parseInt("123456");


        ⑦ 필요이상으로 System.gc()를 사용하면 바람직하지 않음
          
            필요이상으로 System.gc()를 이용하면 프로그램실행 performance가 저하됩니다.



      
      2. String 관련 Tips

        ① 문자열 연결방법
            +연산자를 이용하여 문자열을 연결하게 되면 심하게 performance가 저하됩니다.
            StringBuffer클래스를 사용하면 performance가 향상됩니다.
        
            예) + 연산자에 의한 문자열연결 코드예

              String result = "";          
    for (int i=0; i<loopNum; i++ )  {
    result + =i;
              }
            예) StringBuffer클래스에 의한 문자열연결 코드예

              StringBuffer buf = new StringBuffer();
              for(int i=0; i<loopNum; i++) {
                buf.append(i);
              }
              String result = buf.toString();

            더욱이, 연결후의 문자열의 길이를 알고 있을 경우,  StringBuffer클래스 생성시에
    적당한 초기값을 주면 더욱더 performance가 향상됩니다.
            StringBuffer클래스는 용량이 부족하게 되면 내부적으로 버퍼사이즈가 자동으로 변
    경되나 연결후의 사이즈를  알고 있는 경우에는 초기값으로 사이즈를 주면 그러한
    처리과정을 생략할 수 있습니다.
      
          예) StringBuffer buf = new StringBuffer(length);

           표) 문자열연결에 관한 performance 측정
                                                            
            연결수: 1000        연결수 : 500        
    +연산자        250(ms)        7500(ms)        
    StringBuffer        15(ms)        20(ms)        
    StringBuffer(초기값有)        2(ms)        10(ms)        
            CPU : Pentium 300MHz/ Memory :128M / OS : Linux/ J2SE:1.3.1
                                                    
        ② StringTokenizer클래스
          
    문자열을 자를 때,StringTokenizer클래스를 이용하는 것이 편하기는 하지만 문자열
    이 고정되어 있는 경우에는 독자적인 Tokenizer를 사용하는것이 효율적입니다.

    StringTokenizer클래스가 token을 반복할때, 매번 자를문자가 변경되어 있는지를
    체크하기 때문입니다.

           예) StringTokenizer클래스를 취하는 코드예

             String word = "aaa,bbb,ccc,ddd,eee,fff";

             StringTokenizer token = new StringTokenizer(word,",");

             List list = new ArrayList();
            
             while(token.hasMoreTokens()) {
               list.add(token.nextToken());
             }
            
           예) 자를문자를 ‘,’로 고정한후 token을 추출한 코드예

              String word = "aaa,bbb,ccc,ddd,eee,fff";
              
              List list = new ArrayList();

              int now=0;
              int next=0;

              while ( (next = word.indexOf(",",now)) > 0 )
              {
                list.add(word.substring(now,next));
                now = next + 1;
              }
            

            또한 StringTokenizer클래스에는 hasMoreElements()와 hasMoreTokens() 두개의
    메소드가 있는데,  hasMoreElements()가 내부적으로 hasMoreTokens()를 호출하
    므로 통상적으로 hasMoreTokens()를 이용 하도록 합니다.

            참고) J2SE 1.4부터 새로운 메소드가 추가된것이 있는데, SringTokenizer 클래스의
    token 추출과 같은 기능의 메소드로 java.lang.String 클래스의 split()메소드를 소
    개합니다.

              String word = "aaa,bbb,ccc,ddd,eee,fff";
              String [] result = word.split(",");
      
    3. Collection관련 Tips
        
        ① 배열의 이용
            
    데이타의 개수나 사이즈가 변동하는 경우에만 Collection계통의 클라스를 사용하며,
    그외에는 배열을 사용합니다.
          
        ② J2SE1.2이상에서의 Collection이용

    JDK1.1까지는 Vector클래스나 Hashtable클래스가 편리했으나, 이러한 클래스는 메소드가 동기화(synchronized)
    되어 있습니다. 따라서 동기화가 필요없는 경우에는 비효율적입니다.
    J2SE1.2이상에서는 메소드가 동기화되어있지 않은 ArrayList클라스나 HashMap클
    래스를 이용합니다.
           Vector클래스는 ArrayList로 Hashtable은 HashMap클래스로 바꿔이용합니다.

            예) 구 Collection클래스 이용예
              
               Vector vector = new Vector();
               Hashtable table = new Hashtable();

            예) J2SE1.2이상 Collection클래스 이용예
              
               List list = new ArrayList();
               Map  map  = new HashMap();

            또한, J2SE1.2이상에서 Collection의 동기화가 필요한 경우에는

               List list = Collection.synchronizedList(new ArrayList(..));
            
            위와 같이 사용합니다.            
        
        ③ Collection size 초기화

    Collection을 default 사이즈로 만들면, 필요시 자동적으로 사이즈가 확장되나 명확히 예측이 가능한 경우에는 사이즈를 초기화 하는 편이 훨씬 효율적입니다.

            예) 사이즈를 지정하지 않고 Collection을 생성한 코드예

              List list = new ArrayList();
              HashMap map = new HashMap();

            예) 사이즈를 지정한 Collection 생성 코드예
                
              List list = new ArrayList(num);
              HashMap map = new HashMap(num);


        ④ Iterator클래스보다 빠른 요소검사

           Collection 사이즈를 명확히 알 경우에는 Iterator클래스의 next()와 비교하여,
           Iterator클래스의 hasNext()에 의한 요소종료 체크가 필요없으며 내부처리가 간단한
           List클래스의 get()메소드를 추천합니다.

           예) Iterator클래스의  next()에 의한 요소조사

             Iterator iterator = array.iterator();
             while (iterator.hasNext())
             {
               Object object = iterator.next();
             }

           예) List클래스의 get()에 의한 요소조사

              int size =array.size();
              for (int i=0; i<size ; i++)
              {
                Object object = array.get(i);
              }
              
        ⑤ 요소삽입/삭제시 주의점

            List도중에 요소를 추가/삭제할 경우에 내부적으로 배열의 copy가 행해집니다.
    따라서 요소의 수가 많으면 많을 수록 copy하는 요소수도 많아져 결과적
    으로 performance의 저하를 초래합니다.
    내부적처리로써 [ (전체사이즈) - (삽입/삭제대상요소의 index)] 만큼의 요소가 copy되므로 아래의 예를 참조바랍니다.

            예) List의 맨앞에 요소를 추가/삭제하는 경우 --  속도가 느림.

             list.add(0, new Object());
             list.remove(0);

            예) List의 맨 뒤에 요소를 추가/삭제하는 경우 -- 속도가 빠름.

             list.add(new Object());
             list.remove(list.size() - 1);


        ⑥ List요소 전체삭제

    List 요소를 전체삭제 할때, 통상 쓰는 clear()을 이용하지말고, 새롭게 List를 생성(초기화)하는 편이 효율적입니다. 왜냐하면, clear()는 내부적으로 보유하고 있는 배열의 전체요소에 null을 셋팅함으로써 전체삭제를 실현하기 때문입니다.

            예) clear()에 의한 요소 전체삭제

              List list = new ArrayList();
              
              for(int i=0; i< num; i++) {
                list.add(new Integer(i));
              }

              list.clear();

            예) List재작성에 의한 요소 전체삭제

              List list = new ArrayList();

              for(int i=0; i< num; i++) {
                list.add(new Integer(i));
              }

              list = new ArrayList();

        ⑦ 배열요소 copy방법
        
    루프를 돌며 배열요소를 하나씩 copy할 경우에는 System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)를 이용합니다.
            메소드의 인자는 아래와 같습니다.

              src - the source array.
              srcPos - starting position in the source array.
              dest - the destination array.
              destPos - starting position in the destination data.
              length - the number of array elements to be copied.
            
            예) 루프를 돌며 배열소소를 copy하는 예

               int[] buf = new int[num];
               int[] copy = new int[num];

               for (int i=0; i<num; i++)
               {
                  copy[i] = buf[i];
               }
            
            예) System.arraycopy()에 의한 신속한 copy 예

               int[] buf = new int[num];
               int[] copy = new int[num];

               System.arraycopy(buf,0, copy,0, num);

         ⑧ List에 보존되어 있는 object 요소를 배열에 넣는 방법

    List클래스의 toArray()를 이용하여 List에 보존되어 있는 Object요소를 배열에 넣습니다.

              예) 루프에 의한 object요소 copy 예
                  
                int size = list.size();
                Integer[] result = new Integer[size];

                for (int i=0; i<size; i++)
                {
                  result[i] = (Integer) list.get(i);
                }

              예) toArray()에 의한 신속한 copy

                int size = list.size();
                Integer[] result = new Integer[size];

                list.toArray(result);





    4. IO관련 Tips

         ① 통상적으로 Stream계의 클래스를 사용함

            java.io패키지에서 문자데이터 입출력시에는 Reader/Writer 클래스를
            바이트단위 데이터 입출력시에는 InputStream/OutputStream 을 이용합니다.
            다만, 아스키캐릭터의 경우에는 1문자가 1바이트이므로
    InputStream/OutputStream 클래스를 이용할 수 있습니다.
            
            약 100K 정도의 영문자로 이루어져 있는 텍스트파일을 가지고 예를 들겠습니다.

            예) Reader계 클래스을 이용한 파일 입출력 예

                FileReader in = new FileReader("test.txt");
                int buf;

                while ( buf = in.read() != -1)
                {
                  .......
                }
                in.close();

            예) InputStream계 클래스를 이용한 파일 입출력 예

                FileInputStream in = new FileInputStream("test.txt");
                int buf;

                while ( buf = in.read() != -1)
                {
                  .......
                }

                in.close();

              위의 2가지 예를 비교한 performance 비교표는 아래와 같습니다.
                  
    사용클래스        처리시간(ms)        
    FileReader        18000        
    FileInputStream        800        
    CPU : Pentium 300MHz/ Memory :128M / OS : Linux/ J2SE:1.3.1

    InputStream계 클래스를 이용한 파일 입출력이 월등히 빠른 처리속도를 보임을 알 수 있습니다.
                
         ② Buffering을 이용

            예) Buffering을 한 Reader계 클래스을 이용한 파일 입출력 예

                FileReader in = new FileReader("test.txt");
                BufferedReader bin = new BufferedReader(in);
                int buf;

                while ( buf = bin.read() != -1)
                {
                  .......
                }

                bin.close();

            예) Buffering을 한 InputStream계 클래스를 이용한 파일 입출력 예

                FileInputStream in = new FileInputStream("test.txt");
                BufferedInputStream bin = new BufferedInputStream(in);
                int buf;

                while ( buf = bin.read() != -1)
                {
                  .......
                }
                bin.close();

    위의 2가지 예를 비교한 performance 비교표는 아래와 같습니다.

    사용클래스        처리시간(ms)        
    BufferedReader        150        
    BufferedInutStream        80        
    CPU : Pentium 300MHz/ Memory :128M / OS : Linux/ J2SE:1.3.1


    - the end-

    'etc > old' 카테고리의 다른 글

    iPod  (0) 2008.06.09
    JDOM을 이용하여 XML 읽기 / 생성하기 예제  (1) 2008.06.03
    東京 狐の嫁入  (0) 2008.06.03
    2008년 4월 신작 자막 제작자 정리표  (0) 2008.06.03
    InputStream, OutputStream 쓰자.. (파일 읽고 쓰기)  (0) 2008.06.02

     

    도쿄 여우비(東京 狐の嫁入) の あらすじ --> 東京が出で見ました。-_-;;

    7年前、女優(じょゆう)としての人生(じんせい)に炎症(えんしょう)を感じさせるスジン(수진)が東京(とうきょう)の撮影現場(さつえいげんば)で郊外(こうがい)寿司屋(すしや)(かく)れって入(はい)ってそこで(はたら)いているNewCommerヘンスウ(현수)って運命的(うんめいてき)(こい)をして(もど)ります。そして7年後...韓流(ハンりゅう)スタとして成功したスジンは狐の嫁入のように短(みじか)いが、永久(えいきゅう)に胸(むね)の中に初(はつこい)の人でったあの人、ヘンスウを探しに行ぐんですが...はたして、二人(ふたり)の再(さいかい)(じつげん)するか、美(うつく)しい都市(とし)東京の風景(ふうけい)とともに、かすかな昔(むかし)(こい)の思い出·(おもいで)4部作の感性メロドラマで繰り(くりひろげ)られる。

    參考(さんこう)

    NewCommer :

    1980年代末以降(いこう)、日本人と結婚した在日(ざいにち)人、日本人と結婚して、(あら)たに日本に定着(ていちゃく)した韓人のことを指()します。

     

    狐の嫁入り行列(きつねのよめいりぎょうれつ):

    新潟(にいがた)県東(けんとう)蒲原(かんばら)郡阿賀町津川地()(まいねん)53日に開催(かいさい)される祭(まつり)のことである。

    知らない 單語

    炎症(えんしょう) 염증                                   撮影現場(さつえいげんば) 촬영현장

    郊外(こうがい) 교외                                      寿(すし) 초밥

    (かく)れる 숨다                                         (ちく) 지구, 일정지역

    開催(かいさい) 개최                                      地名(ちめい) 지명

    (はつこい) 첫사랑                                   ()()して 과연

    都市(とし) 도시                                            (とも)に 함께

    思い出·(おもいで) 추억                                  (かす)かな 희미한

    繰りげる(くりひろげる) (책 등을) 펼치다, 벌리다, 전개하다

    以降(いこう) 이후                                         在日(ざいにち) 일본에 있음

    (あら)たに 새롭게                                      定着(ていちゃく) 정착

    ()す 가리키다, 지적하다

    質問

    1. (あい)(こい)何か違いますか。

    2. 參考で地名漢字をよむのが正しいですか。

    2008년 4월 신작 자막 제작자 정리표


    제작 : 디미네이트 (http://diminate.egloos.com)

    초판 : 2008년 4월 3일

    최종 수정일 : 2008년 4월 24일


    ※2008년 3월 혹은 4월부터 방영하는 작품의 자막 제작자 리스트입니다.

    ※방영 요일 및 시간은 다소 차이가 있을 수 있습니다.

    ※작품 제목의 해석은 제작자마다 차이가 있을 수 있습니다.

    ※오류 및 추가 정보 제보는 언제나 환영합니다.

    ※(미정)은 제작자 분께서 아직 확정 짓지 않으셨거나, 언급만 하신 경우입니다.

    ※(애사)는 블로그 업로드 여부가 확인되지 않고, ‘신비로 애니사랑 클럽’에 업로드 되고 있는 경우입니다.

     


     

    요일

    제목

    방영시각

    제작자

    D.C.II.S.S. ~다카포II 세컨드 시즌~

    (ダ・カーポいII セカンドシーズン)

    00:30

    디미네이트 Xian

    ㉲㉮제렌트

    せいつる

    ヒカリへ

    가면의 메이드 가이

    (仮面のメイドガイ)

    01:35

    을뀨

    BLASSREITER

    (ブラスレイタ)

    02:00

    페이티

    stankovic

    tanato

    넷 고스트 PIPOPA

    (ネットゴーストPIPOPA)

    8:30

    리안

    절대가련 칠드런

    (絶対可憐チルドレン)

    10:00

    디미네이트

    을뀨

    코드 기어스 ~반역의 루루슈~ R2

    (コードギアス  反逆のルルーシュ R2)

    17:00

    디텍티브

    프리스트

    Len

    Prisis

    stankovic

    광란 가족 일기

    (狂乱家族日記)

    01:00

    늑대향

    크로미트

    프리스트

    20면상의 딸

    (二十面相の娘)

    02:05

    디미네이트

    부탁해요 마이멜로디 키라랏

    (おねがい♪マイメロディ きららっ★)

    09:30

    세이지준

    개그만화 보기 좋은 날 3기

    (増田こうすけ劇場ギャグマンガ日和)

    23:00

    을뀨

    우리 집의 여우 신령님

    (我が家のお稲荷さま)

    00:00

    프리스트

    히라

    은의 왕(닌자의 왕)

    (隠の王)

    01:30

    라쉬

    라윤

    리안

    여니

    페어라인 자막팀

    네오 안젤리크 Abyss

    (ネオアンジェリーク Abyss)

    02:00

    디미네이트

    aosora

    소울 이터

    (Soul Eater -ソウルイーター-)

    18:00

    늑대향

    크로미트

    Prisis

    우리 집 세 자매

    (うちの3姉妹)

    17:30

    을뀨

    S.A ~스페셜 에이~

    (S・A ~スペシャル・エー~)

    월23:00

    리안

    을뀨

    페어라인 자막팀

    뱀파이어 기사

    (ヴァンパイア騎士)

    01:00

    굄탕

    미즈

    여니

    으니짱

    쿠레나이

    모노크롬 팩터

    (モノクローム・ファクター)

    02:00

    디미네이트

    유희왕 5D's

    18:00

    런닝투혼

    미스X

    RD 잠뇌조사실

    (RD 潜脳調査室)

    00:59

    디미네이트

    tanato

    크리스탈 블레이즈

    (Crystal Blaze -クリスタルブレイズ-)

    01:15

    디미네이트

    비밀 ~탑 시크릿~

    (秘密 ~トップシークレット~)

    01:29

    미사키

    히라

    장난스런 키스

    (イタズラなKiss)

    1:50

    굄탕

    미사키

    미즈

    오늘부터 마왕 3기

    (今日からマ王! 第3シリーズ)

    목 23:00

    고냥마마

    Len

    stankovic

    守辰사랑

    앨리슨과 리리아

    (アリソンとリリア)

    목 23:30

    미즈

    여니

    천일량

    히라

    페스키

    마크로스 프론티어

    (マクロス Frontier)

    01:25

    Prisis

    아쓰맨

    xxxHOLiC◆계

    (xxxHOLiC◆継)

    01:25

    디미네이트

    늑대향

    라윤

    진다

    페이티

    To LOVEる

    (To LOVEる)

    01:55

    모토

    뮤레

    천상

    쿠레나이

    (紅 Kurenai)

    02:00

    을뀨

    쿠레나이

    용고기님(애사)

    카이바

    (カイバ)

    00:00

    tanato

    도서관 전쟁

    (図書館戦争)

    00:45

    디미네이트 페이티

    프리스트

    tanato

    ㉲㉮제렌트

    순정 로맨티카

    (純情ロマンチカ)

    01:20

    리안

    미사키

    히라

    소울 이터 레이트쇼

    (Soul Eater -ソウルイーター-)

    02:15

    늑대향

    크로미트

    Prisis

    드루아가의 탑 ~the Aegis of URUK~

    (ドルアーガの塔 ~the Aegis of URUK~)

    01:15

    젭흘이

    Len

    아마츠키

    (あまつき)

    02:30

    디미네이트

    고냥마마

    라쉬

    쿠레나이

    せいつる

    카노콘

    (かのこん)

    10:30

    늑대향

    모토

    삼성중공업

    일등급

    크로미트

    Xian

    고르고 13

    (ゴルゴ13)

    01:23

    디미네이트

    펭귄 아가씨♥하트

    (ペンギン娘♥はぁと)

    12:00

    아인

    블루 드래곤 -천계의 칠룡-

    (ブルードラゴン -天界の七竜-)

    9:00

    포우

    월~금

    Chi's Sweet Home

    (チーズ スイートホーム)

    06:40

    컨츄리_Boy님(애사)

     


    'etc > old' 카테고리의 다른 글

    Java performance tips  (0) 2008.06.03
    東京 狐の嫁入  (0) 2008.06.03
    InputStream, OutputStream 쓰자.. (파일 읽고 쓰기)  (0) 2008.06.02
    JDom을 이용하여 XML생성하기  (0) 2008.06.02
    JDom 관련 문서  (0) 2008.06.02

    자바에서 파일 읽고 쓰기..

        InputStream 과 OutputStream 사용



    input ≒ read

    output ≒ write



    byte 단위

    char 단위 (2byte)

    읽기

    InputStream

    Reader

    쓰기

    OutputStream

    Writer


    ㅁ InputStream 의 메소드 두개만 알자

      int read() : 한 바이트씩 읽는다 (리턴형 int 는 데이터다..).. 느리지.. 느려..

      int read(byte[] b) : 한번에 왕창 읽는다 (데이터가 byte[] 배열에 저장. 리턴형 int 는 카운터다..)


    ㅁ OutputStream 의 메소드

      void write(byte[] b) : b 바가지로 퍼다가 한번에 처리한다

      void write(byte[] b, int off, int len) : byte[] 배열에 저장, off 는 시작위치 어디부터, len 은 몇개

      void write(int b)


    ************************************************************************************


    코드 예) 웹에서 파일 읽어서 복사

    import java.io.*;
    import java.net.*;

    public class FileCopy1 {

     public static void main(String[] args) throws Exception{
     
      String path = "http://www.penfo.co.kr/bbs/data/free/emma201thumb.jpg";

      URL url = new URL(path);
      InputStream fin = url.openStream();
      System.out.println(fin.getClass().getName());
     
      OutputStream fos = new FileOutputStream("copy.jpg");
     
      while(true){
       int data = fin.read();
       if(data == -1){
        System.out.println("파일 끝났음");
        break;
       }
       fos.write(data);  
      }
      fin.close();
      fos.close();
     }

    }

    ************************************************************************************


    코드 예) 그냥 파일 읽고 복사하기

    import java.io.*;

    public class FileCopy2 {

     public static void main(String[] args) throws Exception{

      InputStream fin = new FileInputStream("aaa.txt");
      OutputStream fos = new FileOutputStream("ccc.txt");
     
      byte[] buffer = new byte[1024];
     
      while(true){
       int count = fin.read(buffer);
       System.out.println("COUNT : " + count);
       if(count == -1){
        System.out.println("더이상 읽은 데이터가 없다.");
        break;
       }
       fos.write(buffer, 0, count);
      }
      fin.close();
      fos.close();
     }

    }


    *************************************************************************************


    파일 경로나 파일 검색 프로그램 기초 코딩 예)


    import java.io.*;

    public class FileSearcher {

     public void findAll(String folderName){
      File file = new File(folderName);
     
      File[] files = file.listFiles();
     
      for(int i=0; i<files.length; i++){
       if(files[i].isDirectory() == true){
        System.out.println("FOLDER : " + files[i].getAbsolutePath());
       }
       else{
        System.out.println("FILE : " + files[i].getName());
       }
      }
     }
     public static void main(String[] args) {

      FileSearcher searcher = new FileSearcher();
      searcher.findAll("C:\\Documents and Settings\\Axl\\My Documents\\Study\\JavaStudy");
     
     }

    }

    이걸 바탕으로 조금 수정해보자.....


    'etc > old' 카테고리의 다른 글

    東京 狐の嫁入  (0) 2008.06.03
    2008년 4월 신작 자막 제작자 정리표  (0) 2008.06.03
    JDom을 이용하여 XML생성하기  (0) 2008.06.02
    JDom 관련 문서  (0) 2008.06.02
    JDOM으로 XML 프로그래밍 단순화 하기 (한글)  (0) 2008.06.02
    사용자 삽입 이미지

    import java.io.*;

    import org.jdom.*;
    import org.jdom.output.*;

    /**
     * JDom을 이용한  파서 예제
     * @author won
     *
     */
    public class MakeXmlWithJDom {
        public static void main(String [] args) {
            new MakeXmlWithJDom();
        }
        public MakeXmlWithJDom(){
           
            /*
             * Create Root Element
             */
            Document doc = new Document();       
            Element rootElement = new Element("options");
            doc.addContent(rootElement);
           
            /*
             * Add FileInfo Element
             */       
            String[] inpFileElements = {"VideoType","FileSize","VideoSize","FrameRate","SampleRate","AutoRate","EndTime"};
            String[] inpFileValue = {"true","true","true","true","true","true","true"};
           
            Element fileInfoElement = new Element("FileInfo");       
            for(int i=0;i<inpFileElements.length;i++){
                addInnerElement(fileInfoElement, inpFileElements[i],inpFileValue[i]);   
            }
            rootElement.addContent(fileInfoElement);
                       
            /*
             * Add ExtractionOption Element
             */
            String inpAutoExtracValue = "true";
            String[] inpAutoElement = {"Time","FileSize","GOP"};
            String[][] inpAutoAttName = {{"from","end"},{"from","end"},{"per"}};
            String[][] inpAutoAttValue = {{"1","MAXIMUM"},{"1","MAXIMUM"},{"1"}};
                   
            Element extractionOption = new Element("ExtractionOption");
            Element elAutoSelect = addInnerElement(extractionOption, "AutoSelect", "");
           
            for(int i=0;i<inpAutoElement.length;i++){
                Element tmpElement = addInnerElement(elAutoSelect, inpAutoElement[i],"");
                for(int j=0;j<inpAutoAttName[i].length;j++){
                    addInnerAttribute(tmpElement, inpAutoAttName[i][j], inpAutoAttValue[i][j]);
                }
            }              
            rootElement.addContent(extractionOption);
           
            /*
             * Add FrameSize Element
             */
                   
            String[] inpFrameSize = {"320X240","600X400","720X480","1024X768"};       
           
            Element frameSize = new Element("FrameSize");
            for(int i=0;i<inpFrameSize.length;i++){
                Element tmpElement = addInnerElement(frameSize, "T"+(i+1),"");
                addInnerAttribute(tmpElement, "size", inpFrameSize[i]);
            }       
            rootElement.addContent(frameSize);
           
            /*
             * Add ExtractFileName Element
             */
            String inpExtractFileName="image_#DATE_#NUM";
            Element extractFileName = new Element("ExtractFileName");
            extractFileName.setText(inpExtractFileName);
            rootElement.addContent(extractFileName);
           
            /*
             * Add SelectFileName Element
             */
           
            String inpSelectFileName="TEST_#NUM";
            Element selectFileName = new Element("SelectFileName");
            selectFileName.setText(inpSelectFileName);
            rootElement.addContent(selectFileName);
           
            /*
             * Add AutoSelect Element
             */
            String inpAutoType="Time";
            String inpAutoValue="1";
           
            Element autoSelect = new Element("AutoSelect");
            addInnerAttribute(autoSelect,"type",inpAutoType);
            addInnerAttribute(autoSelect,"value",inpAutoValue);       
            rootElement.addContent(autoSelect);
           
            /*
             * Preparing for printout
             */       
                           
            XMLOutputter outp = new XMLOutputter();       
           
            /*
             * file output
             */
             try {
                OutputStream fos = new FileOutputStream("C:\\mmm.xml");
                outp.output(doc, fos);
            } catch (Exception e) {
                e.printStackTrace();
            }
           
            /*
             * screen output
             */
            /*
            try{           
                outp.output(doc, System.out);
               
            }
            catch (IOException e) {
                System.out.println(e);
            }
            */   
        }
       
        /**
         * 엘레멘트 하위 요소를 추가하여 준다.
         * @param target 추가하려는 엘레멘트
         * @param eElement 신규 엘레멘트 이름
         * @param eValue 신규 엘레멘트 값
         * @return 신규 엘레멘트
         */
        public Element addInnerElement(Element target, String eElement, String eValue){
            Element newElement = new Element(eElement);
            newElement.setText(eValue);
            target.addContent(newElement);
            return newElement;
        }
       
        /**
         * <pre>
         * 엘레먼트 내부에 어트리뷰트를 추가하여 준다.
         * 추가시 입력된 순서대로 추가된다.
         * </pre>
         * @param target 추가하려는 엘레먼트
         * @param attName 어트리뷰트 이름
         * @param attValue 어트리뷰트 값
         */
        public void addInnerAttribute(Element target, String attName, String attValue){
            Attribute newElement = new Attribute(attName,attValue);
            target.setAttribute(newElement);       
        }
    };

    사람 눈에 맞춰 문서의 인쇄 상태를 보기 좋게 만들려면 포멧을 변경하면 된다.

    Format fm = Format.getPrettyFormat();

    XMLOutputter outp = new XMLOutputter(fm);

    자세한 내용은 org.jdom.output.Format 를 참조하여 변경하면 된다.


    참조 사이트 : http://www.javaworld.com/javaworld/jw-05-2000/jw-0518-jdom.html

    XML 파싱관련


    JDOM 1.1

    JDOM 1.1 Java-Doc

    JDOM Makes XML Easy (PDF)

    출처 : http://www.jdom.org/

    더 좋은 파서가 있다면 리플부탁 드리겠습니다. ㅋㅋ

    + Recent posts