입출력 I/O

Stream 입출력

byte 단위에서의 통신
문자를 입출력하면 ascii 코드에 따라 숫자로 나온다.

Stream 입력

1. 콘솔

FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
BufferedOutputStream bos = new BufferedOutputStream(fos, 1024);

--- 
1024 byte : 사용할 buffer의 크기. 전송하고자 하는 buffer의 사이즈만큼의 공간만큼 
데이터를 입력받았다가 그 영역의 데이터만큼을 쌓아두었다가 한 번에 출력할 수 있도록 형태를 구성.
---

DataOutputStream dos = new DataOutputStream(bos);

--- 
DataOutputStream : 원시 데이터 타입(boolean, integer, ...)의 각각의 값으로서 데이터를 
입력하고 출력할 수 있도록 도와주는 여러가지 메소드를 가지고 있는 클래스
---

dos.write...

2. 파일

File file = new File("파일이름");
FileOutputStream fos = new FileOutputStream(file, false);

----parameter의 boolean값: 파일 내용을 append추가(true) / 덮어쓰기(false) ------

BufferedOutputStream bos = new BufferedOutputStream(fos, 1024);
DataOutputStream dos = new DataOutputStream(bos);
dos.write...

3. 네트워크

Socket so = new Socket(...);

--- 
네트워크 통신. 원격에 있는 다른 컴퓨터. 
Socket 클래스를 이용하면 랜선으로 연결된 인터넷 등을 활용할 수 있는 API 제공하고 있음. 
이 클래스의 객체를 만들게 되면 랜선을 통해 데이터를 주고받을 수 있는 outputstream 이라는 객체를 가짐.
---

BufferedOutputStream bos = new BufferedOutputStream(soc.getOutputStream(), 1024);
DataOutputStream dos = new DataOutputStream(bos);
dos.write...

참고

  • 몇 byte 안 되는 건 FileOutputStream만 써도 되고
  • 많은 양의 데이터를 관리해야하면 BufferedOutputStream,
  • 다양한 형태로 입출력을 해야하면 DataOutputStream 을 쓰면 된다.
  • 세 가지를 모두 다 써야 하는 건 아님.

예시

dos.write(출력하고자하는것); --- 출력
dos.flush(); --- 화면 상에 뿌려져라. buffer에 쌓여있던 걸 비우는 것. 출력해랏.
dos.close(); --- 다 끝났으면 닫기

Stream 입력

콘솔, 파일, 네트워크

  • 위에 stream 출력과 동일한데
  • Output 대신 Input 이다.
FileInputStream fis = new FileInputStream(FileDescriptor.in);
...
dis.read ...

텍스트 입출력

2 byte 단위의 텍스트 입출력
문자를 넣으면 문자 그대로 입출력

텍스트 출력

콘솔, 파일, 네트워크

콘솔
OutputStreamWriter osw = new OutputStreamWriter(System.out);
BufferedWriter bw = new BufferedWriter(osw);
PrintWriter pw = new PrintWriter(bw);
pw.println(...);

텍스트 입력

콘솔, 파일, 네트워크

  • 콘솔 예시
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

System.out.print("이름 = ");
String name = br.readLine();
System.out.println("당신의 이름은 " + name + "입니다.");

--- readLine()은 enter키 칠 때까지 입력 받겠다는 뜻 ---

이러면 console창에
이름 = 
나와서 입력하고 enter 치면 문장 출력됨
  • 파일 예시
File file = new File("C:/java/aaa.txt");
InputStreamReader isr = new InputStreamReader(file);
BufferedReader br = new BufferedReader(isr);

while(true) {
   String str = br.readLine();
   if(str == null) break;
   System.out.println("한 줄씩 읽은 내용 = " + str);
}
br.close();

--- br.readLine() 하면 파일에서 한 줄씩 읽음 ---

객체 입출력

객체 출력

파일, 네트워크

  • 파일
File file = new File("파일이름");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(...);
...

객체 입력

파일, 네트워크

OutputStream --> InputStream

...
ObjectInputStream ois = new ObjectInputStream(bis);
try {
   Object obj = ois.readObject();
} catch(ClassNotFoundException e) {}
...

좋은 웹페이지 즐겨찾기