2015년 10월 21일 수요일

150922 - 자바 12일차 Stream / Thread

150922 - Stream / Thread
*****


io


1. Stream 구조

(1) 단방향
(2) 원칙적으로 순차적 - 예외도 있다.
(3) 지연발생가능
(4) 어떤 장치를 사용하던 간에 사용법은 동일하다. - 스트림은 일종의 필터. 하나만 알면 지장이 없다.
(5) 자바에서는 입출력에 관련된 모든 클래스들을 Java.io 패키지에서 제공.
(6) nio = new input output - 개별적으로 파보기

2. 자바에서 제공하는 Stream 방식

(1) Byte Stream 방식 - 데이터를 1byte씩 보내고 받는 방식
            - InputStream     
               read()
            - OutputStream
               write()
(2) Character Stream 방식 - 데이터를 한문자씩 보내고 받는 방식 ( at least 2byte ) 

            -Reader (문자단위로 사용할때 가장 부모클래스)
               read()
            -Writer
               write()
(3) PrintStream 방식  - 출력을 조금 더 쉽게 하기 위한 . ex) println, print

            -print()
            -println() - 모니터, 파일, 네트워크등 출력 가능



3. 자주 사용할만한 클래스들  

(1) FileInputStream , FileOutputStream  --]Filter class       --> Data persistance   -->> Database ( too heavy and big ) then, -- > File

(2) DataInputStream , DataOutputStream  --]

기본형 8 타입의 데이터를 주고 받을때 사용이 편하다.

(3) RandomAccessFile - 유일하게 임의로 접근하는 방법을 제공한다.
java.lang.Object
java.io.RandomAccessFile

---------> 입출력 X. 랜덤으로 일을 처리하기 때문에 인풋, 아웃풋 스트림을 상속받지 않는다. 

(4) PrintWriter

(5) ObjectInputStream , ObjectOutputStream - byteStream 방식

(6) File


=============================================================

*****Thread  -  한 작업

1) processs program   파일이 저장만 되어있으면 프로그램, 실행이 되면 프로세스

2) 단일 프로세스 멀티프로세스

하나의 프로세스 에서 실횅하는 작업 단위
3) 
멀티쓰레드 - 
4: 든프로그램은 반드시 하나이상의 쓰레드를 포함


============================================================================================================================================================


-----------------------------과제 ----------------------------------------


입력값 1,2,3,4,5 를 주고 5초 카운팅 한후 결과값이 나오게 만들어라


package prjThread;

class ThreadDemo44 extends Thread implements Runnable {

public ThreadDemo44(String string) {

}

@Override
public void run() {
int sum = 0;

for (int i = 1; i <= 5; i++) {

try {
sleep(100);
} catch (InterruptedException e) {

e.printStackTrace();
}

sum += i;
System.out.println("입력 : " + i);
}
try {
sleep(5000);
} catch (InterruptedException e) {

e.printStackTrace();
}
System.out.println("\n결과 : " + sum);
}

}

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

ThreadDemo44 t1 = new ThreadDemo44(null);
 Thread tt1 = new Thread(t1);
 tt1.start();
System.out.println("잠시 기다려주세요");

int cnt = 0;
do {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("...\t");
cnt++;
} while (cnt < 5);

}


-----------------------------------------------------------------------------


------------------------------------------------------------------------------


텍스트파일 cmd 로 복사하기


package CharStream;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileTest22 {

public static void main(String[] args) throws IOException {

// TODO test.txt 내용을 test2.txt로 복사

FileInputStream fin = new FileInputStream("E:\\Test3.txt");
FileOutputStream fout = new FileOutputStream("E:\\Test4.txt",true);//트루로 내용 중첩

int input = 0;
OutputStream os = System.out;
while (true) {
input = fin.read();
if (input == -1) // -1 이라는 값은 ctrl + z 일때 -1이 전달되고 실제로 -1 을쓰면 2글자로인식한다 
break;

os.write((char) input);
os.flush();
fout.write((char) input);
}
fin.close();
fout.close();

}

}

댓글 없음:

댓글 쓰기