JAVA : 스트림 요소 처리, 파일 입출력

soap·2025년 4월 15일

Java : 기초

목록 보기
10/11

🍋 스트림이란

for문 iterator 대신 코드 간결

배열이랑 컬렉션에만 사용되나? .. 아님
배열이나 컬렉션뿐 아니라, 값 자체, 빌더, 함수형 방식, 파일, 숫자 범위 등 다양한 방식으로

내부 반복자이(forEach와 같이 메소드에서 알아서 == 우리가 써주지 않아도 반복분 처리)므로 처리 속도가 빠르고 병렬 처리에 효율적

외부 반복자? : for, iterator 같이 반복의 주도권이 개발자에

List<String> list = Arrays.asList("a", "b", "c");

for (String s : list) {         // 향상된 for문 (외부 반복)
    System.out.println(s);
}
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

람다식과 함께 쓰기 때문에 간결

인덱스를 이용하는 반복문에 스트림이 좋을까?

스트림 만들기

  • 배열 스트림 : Arrays.stream(배열)
int[] arr = new int[] {1,2,3};
IntStream intStream = Arrays.stream(arr);

//arr없이 바로
IntStream intStream = Arrays.stream(new int[]{1,2,3});
Integer[] arr = new Integer[] {1,2,3};
Stream<Integer> stream = Arrays.stream(arr);

//arr없이 바로
Stream<Integer> stream = Arrays.stream(new iInteger[]{1,2,3};

Integer[] Stream <Integer> Arrays.stream(new Integer[]{...})
int[] IntStream Arrays.stream(new int[]{...})

  • 컬렉션 스트림 : .strean()

🚫 제네릭<> 은 기본형이 안되기 때문에 IntStream이라고 따로 맀음

기본형스트림 타입
intIntStream
longLongStream
doubleDoubleStream

🍋 중간처리, 최종처리

스트림은 파이프처럼 계속 연결해서 사용 가능하다
== 스트림 파이프라인
🚫파이프라인 맨 끝에는 최종처리 라인이 있어야 한다.

1. 중간처리 (filtering, mapping, sorting,..)

mapping : 요소변환

boxed()
mapToInt() : T -> int

filtering

sorting

looping

2. 최종처리 (collecting, matching..) : 결과가 하나

forEach()

Optional 클래스

isPresent() : boolean

ifPresent(메소드 재정의해서 쓰면됨) : void
//null체크를 하지 않아도 되서 편한거다

커스텀집계 reduace()

리소스로부터 스트림 얻기

기본형 -> 참조자료형 Arrays.stream() 이용

int[] arr = {1, 2, 3, 4, 5};

// int[] → IntStream → Stream<Integer>
Stream<Integer> stream = Arrays.stream(arr).boxed();

🍋 파일 입출력

바이트 스트림
최상위 클래스는 InputStream, OutputStream
하위클래스들은 아래처럼
입력 : XxxInputStream
출력 : XxxOutputStream

텍스트 스트림
최상위 클래스는 Reader Writer
입력: XXXReader
출력: XxxWriter

1. 바이트 입출력 스트림

프로그램기준 들어오면 입력 스트림, 나가면 출력 스트림

바이트 출력 / 읽기

출력 : write(int b) int는 4바이트지만 끝 1바이트만 출력
write() -> flush() -> close()
입력 : read() : 1바이트를 읽고 int(4byte)로 리턴
read() -> close()

바이트 배열 출력 / 읽기

출력 : write(byte[] b)
입력 : read()

2. 문자 입출력 스트림

문자 출력 / 읽기

3. 보조 스트림

바이트 스트림을 문자스트림으로 변환해서 사용하려면 보조 스트림이 필요하다

변환 스트림

보조스트림 변수 = new 보조스트림(입출력스트림);

1) InputStream -> Reader

2) OutputStream -> Writer

성능 향상 스트림

메모리 버퍼를 제공하여 프로그램의 실행 성능을 향상시키는 보조 스트림

1) 바이트 스트림 : BufferedOuputStream BufferedInputStream
2) 문자 스트림 : BufferedReader BufferedWriter

문자 입력 스트림 Reader에서 성능향상스트림을 사용하면 readLine() 메소드를 사용할 수 있다.

기본 타입 스트림

프린트 스트림

4. File과 Files 클래스

profile
치열하게 살지는 않아도 후회되는 순간은 만들지 말자

0개의 댓글