'분류 전체보기'에 해당되는 글 256건

  1. 2010.07.13 BASE64 형변환 / encode & decode 1
  2. 2010.07.13 inputStream & String 형변환
  3. 2010.07.01 [sample] streaming read to xml (스트리밍 타입으로 xml읽기)
  4. 2010.06.30 [sample] class 파일 버전 확인하기 1
  5. 2010.06.30 정규표현식 / xmlHeader 정보 제거하기
  6. 2010.06.28 [eclipse] velocity color font / 이클립스 폰트 컬러 변경
  7. 2010.06.28 [Apache] TRACE HTTP method disable
  8. 2010.06.09 줄어드는 C: 의 공간을 늘려라!! (root 드라이버 공간만들기)
  9. 2010.06.08 갈수록 커져만 가는 winsxs 줄이기
  10. 2010.05.20 Choose an Ant configuration to run 1

 public final static String encodeSun(byte[] str) {
        String b64enc="";
        sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
        b64enc  = encoder.encode(str);
        return b64enc;
 }

 

 public final static byte[] decodeSun(String str) {
  byte[] b64dec = null;
  try {
   sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
   b64dec = decoder.decodeBuffer(str);
  } catch (IOException ex) { }
        return b64dec;
 }


inputStream 을 String으로 만들때

StringBuffer sb = new StringBuffer();
     byte[] b = new byte[4096];
     for (int n; (n = inputStream.read(b)) != -1;) {
         sb.append(new String(b, 0, n));
     }
  sb.toString();



String 을 inputStream 으로 만들때

InputStream input = new ByteArrayInputStream(contents.getBytes("UTF-8"));


 


 


xml을 스트리밍 타입으로 읽어야 되는 필요성은 xml파일의 크기가 큰 경우에 해당하는것으로
이경우 xml 구조를 원하는데로 한꺼번에 가져오면 outOfMemory가 발생해서
VM이 죽어버리게 된다.
해법은 XML을 순차적으로 읽는것인데 JAVA에서는 특별한 API를 이용하지 않고서도
JDK6.0이상에서 지원되는 기본 API만으로도 쉽게 해결 할 수 있다. 

   : 찾아보면 아래와 같은 방법을 SAX와 DOM의 장점을 섞어 놓은 방법이라고 한다. test해본 결과
     의도한데로의 결과가 잘 출력이 되어서 다행이였다.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class Read2StreamingTypeXML {
   
    private XMLInputFactory inputFactory = null;   
    private XMLStreamReader xmlReader = null;
   
    public Read2StreamingTypeXML() {
        inputFactory = XMLInputFactory.newInstance();
    }
   
    public void read() throws Exception{
          
        xmlReader = inputFactory.createXMLStreamReader(
            new FileReader("neouserCreate.xml"));
       
        while (xmlReader.hasNext()){
           
            Integer eventType = xmlReader.next();
            if (eventType.equals(XMLEvent.START_ELEMENT)){
                System.out.print(" " + xmlReader.getName() + " ");
            }else if (eventType.equals(XMLEvent.CHARACTERS)){
                System.out.print(" " + xmlReader.getText() + " ");
            }else if (eventType.equals(XMLEvent.ATTRIBUTE)){
                System.out.print(" " + xmlReader.getName() + " ");
            }else if (eventType.equals(XMLEvent.END_ELEMENT)){
                System.out.print(" " + xmlReader.getName() + " ");
            }
        }       
        xmlReader.close();
    }
       
    public static void main(String args[]){
        try{
            Read2StreamingTypeXML obj = new Read2StreamingTypeXML();
            obj.read();           
        }catch(Exception exception){
            exception.printStackTrace();
        }
    }
}



추가적으로 stream 방법으로xml을 읽는경우에는 start와 end를 적절히 사용해서
stringBuffer에 적재하고 분석하는 로직이 추가로 개발 되어야 한다. 위에 코드는  단순히 streaming 형태로 xml을 읽을 수 있다는 sample만을 제시하고 있다.




생성된 class 파일의 버전을 몰라 애먹는 경우가 있어 구해놓습니다.
보통의 class 파일은 우리가 알고있는 이상의 로그정보를 가지고 있습니다.
주석, 컴파일된 내용 등등..
class를 날렵하게 생성하신다면 javac 당시에 옵션! 주는거 잊지 마세요.

import java.io.*;

public class ClassVersionChecker {
    public static void main(String[] args) throws IOException {
        for (int i = 0; i < args.length; i++)
            checkClassVersion(args[i]);
    }

    private static void checkClassVersion(String filename)
        throws IOException
    {
        DataInputStream in = new DataInputStream
         (new FileInputStream(filename));

        int magic = in.readInt();
        if(magic != 0xcafebabe) {
          System.out.println(filename + " is not a valid class!");;
        }
        int minor = in.readUnsignedShort();
        int major = in.readUnsignedShort();
        System.out.println(filename + ": " + major + " . " + minor);
        in.close();
    }
}



[^>]*xml[^>]*.?.*true[^>]>


<?xml version="1.0" encoding="utf-8" ?><blog type="tattertools/1.1" migrational="true"><setting>..........</setting>

위에 노란색의 정규 표현식으로 xml Header에 위치한 문자열을 찾는 방법입니다.
본 정규표현식에 중요한 사항은 2개의 xml블럭을 잡는것이 이슈였는데 *.?.* 이 그역할을 톡톡히 해주었네요.


어지간 하면 그냥 쓰려고 했다.
이클립스에 알 수 없는 플러그인 덕분에 vm 파일에 폰트컬러가 적용된 상태로 볼 수 있었으나
이클립스를 다시 설치하고 보니 너무 불편해 졌다.
그래서 몇가지 찾던중 아래와 같은 플러그인 하나를 추천해 본다. (Velocity Web Edit)



http://velocitywebedit.sourceforge.net/

1. 다운로드를 받습니다.
2. 압축을 풉니다.
3. 이클립스의 플러그인 폴더에 해당 파일을 붇여 넣습니다.
4. 이클립스를 다시 실행합니다.
5. 만일 이렇게 했는데도 안되면 openWith를 변경해서 vm파일을 전용 도구로 열리도록 합니다.




이와같이 적용했을때 vm파일은 가독성 높은 파일이 되어 다가옵니다.



아싸! 호방하게 예뻐졌구나!!


그런데 이런것이 가능한 이유는 따로 있다.
바로 zipscript 라는 project 덕분인데 YUI를 기본으로 개발에서 추가로  생성된 markerup tag를
꾸밀 수가 있다는  점이다.
http://code.google.com/p/zipscript/




RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]


※ apache 1.3.33과 2.0.54 이전버전
Apache 1.3.34과 2.0.55 이후 버전에는 「TraceEnable」가 서포트되고 있어 상기와 같이 간단히 TRACE메소드를 무효로 할 수 있지만,
이전 버전(1.3.33과 2.0.54)을 사용하고 있는 경우에는「mod_rewire」를 사용하는 방법이 있다.
이 방법은 「TraceEnable」과는 달리 TRACE메소드가 허가되고 있는 것처럼 보이지만, 내부 처리에 의해 무효화하는 방법이다.
우선, 「mod_rewrite」가 유효하게 되어 있는지 확인한다. 무효로 되어 있다면 유효하게 할 것.
다음의 항목이 httpd.conf에 들어 있으면 된다.


LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c


위의 부분이 확인되었다면, 적당한 부분에

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>
과 같이 기술하고, Apache를 재기동한다.
이것으로 TRACE메소드는 유효하게 되어 있지만, 클라이언트로부터 송신할 수 없게 된다.
예를 들어 TRACE메소드를 송신한 경우

- 적용 전
telnet 192.168.0.201 80
TRACE / HTTP/1.1
Host:localhost

HTTP/1.1 200 OK
Date: Tue, 11 Jul 2006 10:57:30 GMT
Server: Apache/1.3.12 (Unix)
Transfer-Encoding: chunked
Content-Type: message/http

TRACE / HTTP/1.1
Host: localhost

- 적용 후
HTTP/1.1 403 OK


이제 더이상 저장할 공간이 없다.
200m
이정도면 몇가지 application만 구동하면 금방 차버릴터~
그래서 다시한번 열심히 찾아본것이 특정 프로그램에서 c: 를 내 의도와는 다르게 사용할 꺼라는 생각이였다. 물론 그 생각은 적중했고 그 프로그램은 아이튠즈 였다.



아이튠즈의 설정의 "장비" 라는 옵션을 보면 그간 백업한 내역을 확인 할 수 있다.
바로 위의 백업파일들이 Disk 공간을 잡아먹는 괴물이였다.
백업을 삭제하고 확인!
그리고 확인한~ 최종 나의 root공간은 만족스러운 상태로 변화되었다.



http://blogs.msdn.com/b/e7kr/archive/2009/01/15/9320376.aspx
막상 해보니 해도 그만 안해도 그만이다.
위의 글을 더 보고 고심하는게 좋을것 같다 .


컴퓨터 내부에서 엄청난 양을 가지고 있는 winsxs 는 응용프로그램이 설치될때 마다
이전 버전에 대해 차곡 차곡 그 히스토리를 가지고 있는 공간이다.
이곳을 한꺼번에 지우면 단시간적인 효과는 볼 수 있지만 넓은 안목으로 본다면 강제로 지우는것은
그다지 바람직 하지 않다.


HDD의 절대적인 공간 부족으로 허덕이는 나에게 큰 유혹이 아닐 수 없다.
그래서 유혹에 넘어가 보도록 하자!!


* Windows Vista Service Pack 1이 설치된 컴퓨터에서는 VSP1CLN.exe를 실행 한다.
 (Windows Server 2008은 기본적으로 SP1을 포함하므로 VSP1CLN.exe는 사용하지 않음)
* Windows Vista Service Pack 2, Windows Server 2008이 에서는 COMPCLN.exe를 실행


이건... 무슨 조화일까?!
용량이 더 줄었다. T-T
다른이들은 성공 했다는데..






이런것이 등장하는 이유는 Ant를 여러개를 병행해서 사용할 경우 발생합니다.
기존의 사용흔적을 지워야 하는데 방법은 아래와 같습니다.


1 2 3 4 5 6 7 ··· 26 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!