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
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();
}
}
}
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();
}
}