이전글:

2020/12/12 - [JAVA] - 문자 단위 스트림

 

문자 단위 스트림

이전글: 2020/12/12 - [JAVA] - 바이트 단위 문자 입출력 바이트 단위 문자 입출력" data-og-description="이전 글: 2020/12/12 - [JAVA] - 표준입출력 표준입출력" data-og-description="프로그램에서 사용하는..

kwaksh2319.tistory.com

이전글에서 byte를 통해서 문자로 바꿔주는 보조 스트림을 사용해봤습니다.

그렇다면 여기서는 다른 보조 스트림에 대해서 알아보겠습니다.

사실 여기서 중요한건 일반적으로 사용가능한 스트림에서 보조스트림을 계속해서 확장해나간다는 개념이 중요합니다.

즉 데코레이션 디자인 패턴의 중요성을 알려주기 위함이고 필자 생각엔 스트림 개념 자체는 크게 어렵지 않는것같습니다. 

 

 

실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림 

FileInputStream과 FileOutputStream이 보조 스트림의 상위 클래스

Buffered 스트림

DataInputStream/DataOutputStream

 

package Test01;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Main {

	
	
	
	
	public static void main(String [] args) throws IOException  {
		  long mileseconds=0;
		  
		 try(FileInputStream fis=new FileInputStream("a.zip");
				 FileOutputStream fos=new FileOutputStream("copy.zip");
				 BufferedInputStream bis=new BufferedInputStream(fis);
				 BufferedOutputStream bos=new BufferedOutputStream(fos);
				 
				 ) {
			 
			 mileseconds=System.currentTimeMillis();
			 
			 int i;
			 while((i=fis.read())!=-1) {
				 bos.write(i);
			 }
			 mileseconds=System.currentTimeMillis()-mileseconds;
		} catch (Exception e) {
			System.out.println(e);
			// TODO: handle exception
		}
		 
		 
		 Socket socket =new Socket();
		 BufferedReader isr=new BufferedReader(new InputStreamReader(socket.getInputStream()));//데코레이터 패턴 보조 스트림 계속해서 추가 
		 isr.readLine();
		 System.out.println("시간"+mileseconds);
		 
		 System.out.println("====================================================");
		 
		 
		 
      
	}
	
	
	
}

여기서도 try문을보면 

Buffered라는 보조스트림을 사용하였다는것입니다. 나머지는 이전과 같습니다.

try(FileInputStream fis=new FileInputStream("a.zip");
				 FileOutputStream fos=new FileOutputStream("copy.zip");
				 BufferedInputStream bis=new BufferedInputStream(fis);
				 BufferedOutputStream bos=new BufferedOutputStream(fos);
				 
				 ) 

아래도 같은 구조여서 크게 설명하진않고 기능만 간단하게 써두겠습니다.

 

여러가지 보조 스트림 사용하기 

Buffered 스트림 :내부에 8192 바이트 배열을 가지고 있음

                      읽거나 쓸때 속도가 빠름

 

DataInputStream/DataOutputStream

                  : 자료가 저장되 상태 그대로 자료형을 유지하며 읽거나 쓰는기능을 제공하는 스트림

 

package Test01;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Main {

	
	
	public static void main(String [] args)   {
		
		
		
		
		//data stream 
		 
		try(FileOutputStream fos = new FileOutputStream("data.txt");
			 DataOutputStream dos=new DataOutputStream(fos);
				 FileInputStream fis=new FileInputStream("data.txt");
				DataInputStream dis=new DataInputStream(fis);
				){
			
			dos.writeByte(100);	
			dos.write(100);
			dos.writeChar('A');
			dos.writeUTF("안녕하세요");
			System.out.println(dis.readByte());
			System.out.println(dis.read());
			
			System.out.println(dis.readChar());
			System.out.println(dis.readUTF());
	
			
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			
		}
					
		 
      
	}
	
	
	
}

'프로그래밍언어 > JAVA' 카테고리의 다른 글

<JAVA>몇가지 추가 입출력 클래스  (0) 2020.12.13
<JAVA>직렬화  (0) 2020.12.13
<JAVA>문자 단위 스트림  (0) 2020.12.12
<JAVA>바이트 단위 문자 입출력  (0) 2020.12.12
<JAVA>표준입출력  (0) 2020.12.12

+ Recent posts