[데이터포멧] ByteArray

ByteArray

Server.java

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

// Protocol - Calculation
// => Byte Array
//    [op: char] [lhs: int] [rhs : int]
//    '+', '-', '*'
public class Server {

  public static void main(String[] args) {
    try {
      byte[] data = new byte[1024];
      ServerSocket serverSocket = new ServerSocket(5000);
      Socket socket = serverSocket.accept();


      try (InputStream is = socket.getInputStream();
           DataInputStream dis2 = new DataInputStream(is)) {

        int count = 0;
        while (true) {
          int packetLen;
          try {
            packetLen = dis2.readInt();
          } catch(EOFException e){
            break;
          }

          int ret = is.read(data, 0, packetLen);
          if (ret == -1) {
            break;
          }

          ByteArrayInputStream bis = new ByteArrayInputStream(data);
          DataInputStream dis = new DataInputStream(bis);

          char op = dis.readChar();
          int lhs = dis.readInt();
          int rhs = dis.readInt();

          System.out.printf("%5d - %d %c %d \n", count++, lhs, op, rhs);
        }
      }

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Client1.java

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client1 {

  public static void main(String[] args) {
    char op = '+';
    int lhs = 10;
    int rhs = 32;

    try {
      Socket socket = new Socket("127.0.0.1", 5000);
      try (OutputStream os = socket.getOutputStream()) {
        for (int i = 0; i < 100000; i++) {
          // Decorator Pattern : 데코레이터 패턴
          ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
          DataOutputStream dos = new DataOutputStream(bos);
          dos.writeChar(op);
          dos.writeInt(lhs);
          dos.writeInt(rhs);

          byte[] data = bos.toByteArray();
          int len = bos.size();
          os.write(data, 0, len);
        }  
      }

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Client2.java

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client2 {
  public static void main(String[] args) {

    char op = '+';
    int lhs = 10;
    int rhs = 32;

    try {
      Socket socket = new Socket("127.0.0.1", 5000);

      try (OutputStream os = socket.getOutputStream();
           DataOutputStream dos2 = new DataOutputStream(os)) {

        for (int i = 0; i < 100000; i++) {
          ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
          DataOutputStream dos = new DataOutputStream(bos);

          dos.writeChar(op);
          dos.writeInt(lhs);
          dos.writeInt(rhs);

          byte[] data = bos.toByteArray();
          int len = bos.size();

          dos2.writeInt(len);
          os.write(data, 0, len);
        }
      }

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}