Stream이란
- 1btye 씩 읽음 그래서 btye 기반스트림이라고 불림
- input 과 output 따로 있음
- inputStream : 데이터를 읽어오는 것 ,Stream 최상위 클래스이자 추상클래스
- outputStream : 데이터 출력 하는 것, Stream 최상위 클래스 이자 추상클래스
0.스트림객체 생성
byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
byte[] outSrc = null;
//스트림 객체 생성하기
//inputStream : 입력
ByteArrayInputStream bais = new ByteArrayInputStream(inSrc);
//outputStream : 출력
ByteArrayOutputStream baos = new ByteArrayOutputStream();
1. read() & write(int b)
read()
- 입력 스트림으로 부터 1바이트 읽고 4바이트 int 타입으로 리턴
=> 리턴된 4바이트 중 1바이트에만 데이터가 들어있음.- ex) 3개 바이트가 들어오면 read()메서드로 1바이트씩 3번 읽음
- 더 이상 바이트를 읽을 수 없으면 read()는 -1 리턴
=> 읽을 수 있는 마지막 바이트까지 루프 돌며 한 바이트씩 읽음
리턴 타입 | 메서드 | 설명 |
int | read() | 입력 스트림으로부터 1바이트를 읽고 읽은 바이트 리턴 |
int | read(byte[] b) | 입력 스트림으로부터 읽은 바이트들은 매개값으로 주어진 바이트 배열 b에 저장, 실제 읽은 바이트 수 리턴 |
int | read(byte[] b, int off, int len) | 입력 스트림으로부터 len 개의 바이트만큼 읽고 매개값으로 주어진 바이트 배열 b[off]부터 len까지 저장한다. 그리고 실제로 읽은 바이트 수인 len개를 리턴 len개를 모두 읽지 못하면 실제로 읽은 바이트 수 리턴 |
void | close() | 사용한 시스템 자원을 반납하고 입력 스트림 닫음 |
write(int b)
- 파라미터로 전달된 바이트 배열을 출력 스트림으로 전송
int data = 0;
while ((data = bais.read()) != -1) {
baos.write(data); // 출력하기
}
outSrc = baos.toByteArray();
System.out.println("inSrc =>" + Arrays.toString(inSrc));
System.out.println("outSrc =>" + Arrays.toString(outSrc));
더보기
while ((data = bais.read()) != -1) { //(data = bais.read()) -1이면 반복문 종료
baos.write(data); // 출력하기
}
① bais
- byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
- ByteArrayInputStream bais = new ByteArrayInputStream(inSrc);
② data = bais.read()
- bais.read() 값을 data 에 대입
③ (data = bais.read()) != -1
- bais.read() 값을 data 에 대입 하면서 더 이상 읽을 데이터 없으면 -1 반환
① baos
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
② baos.write(data);
- 파라미터(반복문 조건에 있는 data)로 전달된 바이트 배열을 출력 스트림으로 전송
리턴 타입 | 메서드 | 설명 |
void | write(int b) | 1byte 출력 |
void | write(byte[] b) | 매개값으로 주어진 배열 b의 모든 바이트 출력 |
void | write(byte[] b,int off,int len) | 매개값으로 주어진 배열b[off]부터 len개의 바이트 출력 |
void | flush() | 출력 버퍼에 잔류하는 모든 바이트 출력 |
void | close() | 출력 스트림을 닫고 사용 메모리 해제 |
toByteArray() : byte array로 반환
- 출력된 스트림 데이터 배열로 가져오기
outSrc = baos.toByteArray();
System.out.println("inSrc =>" + Arrays.toString(inSrc));
System.out.println("outSrc =>" + Arrays.toString(outSrc));
- Arrays.toString : 배열 내용 출력
System.out.println(Arrays.toString(변수명));
원본
더보기
package kr.or.ddit.basic;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
public class T03ByteArrayIOTest {
public static void main(String[] args) {
byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
byte[] outSrc = null;
/*
//직접 복사하기
//1. 배열초기화
outSrc = new byte[inSrc.length];
//for문이용한 직접복사
for (int i = 0; i < inSrc.length; i++) {
outSrc[i] = inSrc[i];
}
System.out.println("직접 복사 후 outSrc =>" + Arrays.toString(outSrc));
*/
/*
//arraycopy를 이용한 배열 복사 하기
//1. 배열초기화
outSrc = new byte[inSrc.length];
System.arraycopy(inSrc, 0, outSrc, 0, inSrc.length);
System.out.println("arraycopy 복사 후 outSrc =>" + Arrays.toString(outSrc));
*/
//스트림
// 1btye씩 읽음 그래서 btye기반 스트림 으로 불림
//input 과 output 따라 있음
// 기준 : 프로그램 관점에서 데이터를 읽어오는것은 inputStream 필요
// 데이터를 출력하는것은 outputStream 필요
//스트림 객체 생성하기
//inputStream : 입력
ByteArrayInputStream bais = new ByteArrayInputStream(inSrc);
//outputStream : 출력
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//byte < int
int data = 0; // 읽어온 바이트데이터를 저장하기 위한 변수
// read() 메서드 => byte 단위로 데이터를 읽어와 int형으로 반환한다.
// (더 이상 읽을 데이터가 없으면 -1 반환한다.)
// => -1를 표현할려면 int 타입으로 가져와야한다.
while ((data = bais.read()) != -1) {
baos.write(data); // 출력하기
}
// 출력된 스트림 데이터를 배열로 가져오기
outSrc = baos.toByteArray();
System.out.println("inSrc =>" + Arrays.toString(inSrc));
System.out.println("outSrc =>" + Arrays.toString(outSrc));
}
}
'JAVA > 수업' 카테고리의 다른 글
T05FileStreamTest (0) | 2024.02.03 |
---|---|
T04ByteArrayIOTest2 (0) | 2024.02.02 |
T02FileTest(exists,createNewFile,listFiles,list,displayFileList) (0) | 2024.02.02 |
T01FileTest File 객체 (0) | 2024.01.31 |
T01Thread 싱글 스레드 프로그램 (0) | 2024.01.26 |