public class outStream extends java.io.BufferedOutputStream{
 // 객체 생성시
 java.util.Vector list = null;
 java.util.Vector leng = null;

 public outStream(java.io.OutputStream os){
  super(os);
  list = new java.util.Vector();
  leng = new java.util.Vector();
 }
 // 오버 로딩
 public void write(int protocol){
  try {
   // 프로토콜 3바이트
   super.write(String.valueOf(protocol).getBytes());
  }catch (java.io.IOException e){
   System.out.println("outStream 객체의 write(int) 메소드에서 예외발생\n 예외 내용 : "+e);
  }
 }
 public void write(String str){
  byte[] b = str.getBytes();
  leng.add(new Integer(b.length));
  list.add(new String(str));
 }
 // 오버 라이딩
 public void flush(){
  try{
   // 해더길이
   super.write(this.getByte(leng.size()));
   print(leng.size());
   // 데이타 배열길이 2바이트
   for (int i=0 ; i<leng.size();i++ ){
    super.write(this.getByte((Integer)leng.elementAt(i)));
    print((Integer)leng.elementAt(i));
   }
   
   // 데이타 배열 n바이트
   for (int i=0 ; i<list.size();i++ ){
    super.write(String.valueOf(list.elementAt(i)).getBytes());
    print(String.valueOf(list.elementAt(i)));
   }
   
   // 버퍼링된 데이타를 플래시
   super.flush();
   list.clear();
   leng.clear();

  }catch (java.io.IOException e){
   System.out.println("outStream 객체의 flush() 메소드에서 예외발생\n 예외 내용 : "+e);
  }
 }
 public byte[] getByte(int num){
  byte[] z = new byte[2];
     z[0] = (byte)(num & 0xFF);
     z[1] = (byte)((num & 0xFF00)>>8);
  return z;
 }
 public void print(Object o){
  System.out.println(o.toString());
 }
}

 

 

public class inStream extends java.io.BufferedInputStream{
 // 객체생성
 public inStream(java.io.InputStream is){
  super(is);
 }
 // 오버로딩
 public java.util.Vector Read(){
  java.util.Vector list = new java.util.Vector();
  java.util.Vector leng = new java.util.Vector();
  
  try{
   // 프로토콜
   //byte[] protocol  = new byte[3];
   //super.read(protocol,0,3);
   //list.add(new String(protocol));

   // 해더길이
   byte[] head_len = new byte[2];
   super.read(head_len,0,2);

   for (int i=0; i< this.getInt(head_len) ; i++){
    // 데이타배열의 길이
    byte[] len = new byte[2];
    super.read(len,0,2);
    leng.add(new Integer(this.getInt(len)));
   }

   for(int i=0; i< leng.size(); i++){
    // 데이타
    int len = (Integer)leng.elementAt(i);
    byte[] b = new byte[len];
    super.read(b,0,len);
    list.add(new String(b));
   }

  }catch (java.io.IOException e){
   System.out.println("inStream 객체의 Read()메소드에서 예외발생 \n예외내용 : "+e);
  }
  return list;
 }
 public void close(){
  try {
   super.close(); 
  }catch (java.io.IOException e){
   System.out.println("inStream 객체의 close()메소드에서 예외발생 \n예외내용 : "+e);
  }
 }
 public int getInt(byte[] s){
  return ((s[1] << 8) +(s[0] & 0xFF));
 }
 public void print(Object o){
  System.out.println(o.toString());
 }
}

 

데이타 내용

[프로토콜][해더의 길이][데이타 바이트배열의 길이] ............................[데이타 바이트배열]

 

소켓으로 데이타를 보낼때 자기만의 통신규약을 만들고 해더를 만듬으로써 정확한 데이타를 보낼수 있다.

아직 아무것도 모르는상태라 이정도 밖에 못했지만 나중에는 보다 넓게 수용할수 있는 방식을 생각해서 만들어야겠다. 

 


Posted by 영웅기삼
,