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());
}
}
데이타 내용
[프로토콜][해더의 길이][데이타 바이트배열의 길이] ............................[데이타 바이트배열]
소켓으로 데이타를 보낼때 자기만의 통신규약을 만들고 해더를 만듬으로써 정확한 데이타를 보낼수 있다.
아직 아무것도 모르는상태라 이정도 밖에 못했지만 나중에는 보다 넓게 수용할수 있는 방식을 생각해서 만들어야겠다.
'Programming > JAVA' 카테고리의 다른 글
XSLT (0) | 2006.04.13 |
---|---|
[자바(JAVA)응용강좌] 네트워크 게임 만들기 (0) | 2006.04.10 |
Searching (3) (0) | 2006.03.23 |
[EKOO의 JAVA를 이용한 자료구조:11회] Heap (2) (0) | 2006.03.23 |
[EKOO의 JAVA를 이용한 자료구조:8회] Recursion(1) (0) | 2006.03.23 |