Jam's story

28일차 -입출력 IO 본문

Java

28일차 -입출력 IO

애플쩀 2022. 3. 29. 23:06

 

스트림 

컴퓨터 내부/외부의 장치와 프로그램간의 데이터를 주고받는 기술 
데이터를 운반하는데 사용되는 연결통로
단방향방식만 가능하기 때문에, 입력스트림과 출력스트림 두개가 필요하다 
큐, fifo 방식 

 

보조스트림

스트림의 기능을 향상시키거나 새로운 기능을 추가할 수있다. 
버퍼만 제공
성능이 향상 

 

바이트기반스트림 - InputStream OutputStream 

주로  다른곳에 입출력하기 전에 데이터를 임시로 바이트배열에 담아서 변환 등의 작업을 하는데 사용 

 

자바의 정석 -남궁성

public class Prac {
public static void main(String[] args) {
	byte[] inSrc= {0,1,2,3,4,5,6,7,8,9};
	byte[] outSrc= null;
	
	ByteArrayInputStream input=null;
	ByteArrayOutputStream output=null;
	input=new ByteArrayInputStream(inSrc);
	output=new ByteArrayOutputStream();
	
	int data=0;
	while ((data=input.read())!=-1) {
		output.write(data);
	}
	outSrc=output.toByteArray();
	System.out.println(Arrays.toString(inSrc));
	System.out.println(Arrays.toString(outSrc));
	
}}
public class Prac {
public static void main(String[] args) {
	byte[] inSrc= {0,1,2,3,4,5,6,7,8,9};
	byte[] outSrc= null;
	byte[] temp=new byte[4];
	
	ByteArrayInputStream input=null;
	ByteArrayOutputStream output=null;
	
	input=new ByteArrayInputStream(inSrc);
	output=new ByteArrayOutputStream();
	
	System.out.println(Arrays.toString(inSrc));
	
	try {
		while(input.available()>0) {
		int len=input.read(temp);
			output.write(temp,0,len);
			
		
		}
	} catch (Exception e) {
		// TODO: handle exception
	}

	outSrc=output.toByteArray();
	System.out.println(Arrays.toString(inSrc));
	System.out.println(Arrays.toString(temp));
	System.out.println(Arrays.toString(outSrc));
	
}}

 

파일기반스트림 - FileInputStream, FileOutputStream


DataInputStream ,DataOutputStream
public class Prac {
public static void main(String[] args) {
FileOutputStream fos=null;
DataOutputStream dos=null;

try {
	fos=new FileOutputStream("sample.dat");
	dos=new DataOutputStream(fos);
	dos.writeInt(10);
	dos.writeFloat(20.0f);
	dos.writeBoolean(true);
	dos.close();
} catch (Exception e) {
	// TODO: handle exception
	e.printStackTrace();
	
}
}}

이진데이터로 저장되어서 알수없는 글자들로 되어있다. ->ByteArrayOutputStream

public class Prac {
public static void main(String[] args) {
try (FileInputStream fis=new FileInputStream("simple.dat");
		DataInputStream dis=new DataInputStream(fis);){
	System.out.println(dis.readInt());
	System.out.println(dis.readFloat());
	System.out.println(dis.readBoolean());
} catch (Exception e) {
	// TODO: handle exception
}
public class Prac {
public static void main(String[] args) {
int sum=0;
int score=0;
try(FileInputStream fis=new FileInputStream("score.dat");
		DataInputStream dis=new DataInputStream(fis);
		)
{
	while(true) {
		score=dis.readInt();
		System.out.println(score);
		sum+=score;
	}
} catch (Exception e) {
	// TODO: handle exception
}

}}

 

SequenceInputStream

여러개의 입력스트림을 연속적으로 연결해서 하나의 스트림으로부터 데이터를 읽는 것과 같이 처리핡 수있도록 도와준다. 
큰 파일을 여러개로 나누었다가 하나의 파일로 합치는 것과 같은 수행 

 

PrintStream

데이터를 기반스트림에 다양한 형태로 출력할 수있는 printf print println
출력된 매개변수를 지정할 수 있다 .
첫번째 매개변수 => 1$

 

문자기반스트림 - Writer , Reader 

char형이 java에서는 2byte 이다. 바이트기반스트림에서는 문제가 있기 때문에 존재 
문자데이터 입출력때 사용 
inputStream ->Reader 
ouptutStream -> Writer
UTF-16값의 변환을 자동적으로 

public class Prac {
public static void main(String[] args) {
try {
	String fileName="C:\\Users\\kimjm\\OneDrive\\문서\\tet.txt";
	FileInputStream fis=new FileInputStream(fileName);
	FileReader fr=new FileReader(fileName);
	
	int data=0;
	
	//fileinput스트림 이용 
	while ((data=fis.read())!=-1) {
		System.out.println((char)data);
		
	}
	System.out.println();
	fis.close();

	//fileReader이용 
	while((data=fr.read())!=-1) {
		System.out.print((char)data);
		
		
	}
} catch (Exception e) {
	// TODO: handle exception
}
	
}}

 

StringReader StringWriter 
public class Prac {
public static void main(String[] args) {
String inputData="ABCD";
StringReader input=new StringReader(inputData);
StringWriter output=new StringWriter();

int data=0;
try {
	while((data=input.read())!=-1) {
		output.write(data);
	}
	System.out.println(output.toString());
} catch (Exception e) {
	// TODO: handle exception
}
}}
BufferedReader, BufferedWriter 
public class Prac {
public static void main(String[] args) {
	String pathName="C:\\Users\\kimjm\\OneDrive\\문서\\tet.txt";
try  ( FileReader fr=new FileReader(pathName);
		BufferedReader br=new BufferedReader(fr);
		){
	String line="";
	for (int i = 0; (line=br.readLine())!=null; i++) {
		if(line.indexOf(";")!=-1) {
			System.out.println(i+":"+line);
		}
	}
} catch (IOException e) {
	// TODO: handle exception
}
}}

 

System.in-화면에 입력하는 함수 
System.out-
화면에 출력하는 함수
System.err-화면에 출력하는 함수  
바이트 스트림 
package days28;

import java.io.File;
import java.io.FileInputStream;
import java.io.PrintStream;

/**
 * @author 지민
 * @date 2022. 3. 29. - 오전 9:03:10
 * @subject 
 * @content 
 * 
 */


public class Ex01 {
public static void main(String[] args) {
	String pathname="";
	String copyPathname="";
	
	fileCopy_byteStream(pathname,copyPathname);
	
}

/**
 * @param pathname
 * @param copyPathname
 */
private static void fileCopy_byteStream(String pathname, String copyPathname) {
	// TODO Auto-generated method stub
	
	long start=System.nanoTime();
	File f1=new File(pathname);
	PrintStream ps=System.out;//화면에 출력하는 스트림 객체 ,바이트 스트림 
	try (FileInputStream fis=new FileInputStream(f1);){
		int b;
		while((b=fis.read())!=-1) {
			ps.println(b);
			
		}
		
	} catch (Exception e) {
		
	}
	long end=System.nanoTime();
	System.out.println("처리기간:"+(end-start)+"ns 시간 "+f1.length()+" bytes 복사완료 ");
}
}
flush - 파일을 저장
close- 선 flush 후 닫기 
RandomAccessFile

자바의 정석- 남궁성

public class Prac {
public static void main(String[] args) {
	  int [] score = {
	          1,100,90,90,            
	          2,70,90,100,
	          3,100,100,100,
	          4,70,60,80,
	          5,70,90,100
	    };
	  try (RandomAccessFile raf=new RandomAccessFile("score.dat","rw");){
		for (int i = 0; i < score.length; i++) {
			raf.writeInt(score[i]);
		}
		while(true) {
			System.out.println(raf.readInt());
		}
	} catch (EOFException e) {
		// TODO: handle exception
	}
}}

 

바이트 스트림
File[InputStream]
File[OutputStream]
실행파일 . 이미지, 동영상 

보조스트림 
BufferedInputStream
BufferedOutputStream 
바이트 스트림의 입출력효율을 높이기 위함 

 

SequenceInputStream 
여러개의 입력 스트림을 연속적으로 연결해서 하나의 스트림으로 처리하고자 한다, 
package days28;

import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Vector;

/**
 * @author 지민
 * @date 2022. 3. 29. - 오후 12:07:05
 * @subject 
 * @content 
 * 
 */
public class Ex05 {
public static void main(String[] args) { 
	
	try {
		FileInputStream fis1=new FileInputStream("빌넣메일.docx-.1");
		int b;
		while((b=fis1.read())!=-1) {
			
		}
		FileInputStream fis2=new FileInputStream("빌넣메일.docx-.2");
	
		Vector<FileInputStream> vt=new Vector<>();
		vt.addElement(fis1);
		vt.addElement(fis2);
		Enumeration<FileInputStream> en=vt.elements();
		
	} catch (Exception e) {
		// TODO: handle exception
	}
}
}

 

표준 입출력
표준 입력장치(키보드) - >입력스트림 System.in ==inputStream
표준 출력장치(모니터 ,프린터기) ->출력스트림 == System.out==PrintStream

 

'Java' 카테고리의 다른 글

days02 오라클  (0) 2022.04.06
순서도 그리기  (0) 2022.04.02
days27 -입출력  (0) 2022.03.28
[컬렉션 프레임워크] - TreeSet , HashMap  (0) 2022.03.26
26일차  (0) 2022.03.25
Comments