TIL(2022.03.04)

조지성·2022년 3월 4일
0

TIL

목록 보기
39/78
post-thumbnail

InputStreamReader

InputStreamReader를 사용하면 부호화를 자동으로 적용
그러나 가변적으로 사용할 수 없어서 사이즈를 고정적으로 지정해야해서 메모리 낭비가 발생할 수 있다.

package ch07;

import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamEx02 {
	public static void main(String[] args) {
		InputStream in = System.in; // System.in(키보드)
		InputStreamReader ir = new InputStreamReader(in); // 65->A로 부호화 시켜주는 역활
		
		try {
			//가변적으로 사용할 수 없음 따라서 고정적으로 부여하거나 기본사이즈를 크게 잡아야함 => 메모리 낭비
			char[] data = new char[1];
			ir.read(data); // 부호화 필요없음
			//int data = ir.read();
			System.out.println(data);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}	

BufferedReader

BufferedReader

  • 숫자(이진코드) -> 부호화
  • 문자를 가변적으로 받는다. 배열의 공간 낭비가 없다.
  1. 양 끝단의 버퍼의 크기를 맞춘다.
  2. 버퍼가 가득차면 자동전송된다(flush)
    자동전송의 조건 : 상대버퍼가 비어줘야 한다.
  3. 전송된 후 버퍼가 비워지고 나머지 데이터가 갱신
package ch07;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamEx03 {
	public static void main(String[] args) {
		InputStream in = System.in; // System.in(키보드)
		InputStreamReader ir = new InputStreamReader(in); // 65->A로 부호화 시켜주는 역활
		BufferedReader br = new BufferedReader(ir);
		
		try {
			String data = br.readLine(); // 전송되는 데이터를 비움
			System.out.println(data);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}	

소켓통신

  • 소켓 통신
    : 양 끝단에 포트를 두고 통신
    : Byte Stream을 통해서 데이터를 주고받음

서버소켓

package ch07.socket2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerFile {
	// 클라이언트 연결을받는 소켓
	ServerSocket serverSocket;
	// 실제 통신을 하는 소켓
	Socket socket;
	BufferedReader br;

	public ServerFile() {
		System.out.println("1. 서버 소켓 시작-----------");
		try {
			serverSocket = new ServerSocket(10000);
			System.out.println("2. 서버소켓 생성완료 : 클라이언트 접속대가------");
			socket = serverSocket.accept(); // 클라이언트 접속 대기중...
			System.out.println("3.클라이언트 연결 완료----buffer 연결완료(read)");

			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

			while (true) {//지속되게
				String msg = br.readLine();
				System.out.println("클라이언트로 부터 받으 메시지 : " + msg);
			}
		} catch (Exception e) {
			System.out.println("서버소켓 에러 발생함" + e.getMessage());
		}
	}

	public static void main(String[] args) {
		new ServerFile();
	}
}

클라이언트 소켓

package ch07.socket2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;


public class ClientFile {
	Socket socket;
	BufferedWriter bw;
	BufferedReader br;
	
	public ClientFile() {
		//소켓 연결
		try {
			System.out.println("1. 클라이언트 소켓 시작-----------");
			socket = new Socket("localhost", 10000); // 서버소켓이 accept()메서드 호출
			
			System.out.println("2. 버퍼(write)연결완료 -----------");
			bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		
			//키보드 연결
			System.out.println("3.키보드 스트림 + 버퍼(read)연결완료 -----------");
			br = new BufferedReader(new InputStreamReader(System.in));
			
			while(true) { //지속되게
				System.out.println("4.키보드 입력 대기중 -----------");
				String keyboardMsg = br.readLine();
				
				//메세지의 끝을 알려줘야한다 \n
				bw.write(keyboardMsg+"\n");
				bw.flush(); //강제로 버퍼 비워줌
			}
		} catch (Exception e) {
			System.out.println("서버소켓 에러 발생함"+e.getMessage());
		}
	}
	
	public static void main(String[] args) {
		new ClientFile();
	}
}
profile
초보 개발자의 성장기💻

0개의 댓글