-
[TIL] 2022년 9월 16일 금요일카테고리 없음 2022. 9. 16. 23:28
1.4 보조 스트림 - 보조 스트림은 실제로 데이터를 주고 받는 스트림이 아님 → 데이터를 입출력할 수 없음 - 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있음 → 스트림을 생성한 다음 보조 스트림을 생성해야 함 // 스트림 생성 FileInputStream fis = new FileInputStream("text.txt"); // 만든 스트림을 이용하여 보조 스트림 생성 BufferedInputStream bis = new BufferedInputStream(fis); // 보조 스트림으로 데이터를 읽음 bis.read(); text.txt 파일을 읽기 위해 FileInputStream을 사용하되 BufferedInputStream의 버퍼를 이용하여 성능을 향상시키는 자바의 정석 예제 코드이..
-
[TIL] 2022년 9월 15일 목요일카테고리 없음 2022. 9. 15. 23:20
1.3 바이트기반 스트림 - InputStream, OutputStream 스트림은 바이트 단위로 데이터를 전송한다. InputStream과 OutputStream은 입출력 대상에 따라 자식 클래스로 다음의 클래스가 있다. 책에는 크게 File(파일), ByteArray(메모리, byte배열), Piped(프로세스), Audio(오디오 장치)가 있는데 AudioInputStream은 패키지가 다르고 AudioOutputStream은 검색해봐도 안 나온다. InputStream과 OutputStream의 추상메소드로 각각 read()와 write(int b)가 있다. 추상 메서드 칸을 보면 각각의 추상메서드와 오버로드된 두 개의 메소드가 있다. // InputStream public abstract int..
-
[자바의 정석] Ch.14 람다와 스트림스터디플래너/공부하기 2022. 9. 10. 11:57
2.4 Optional와 OptionalInt Optional은 null이 아닌 값을 가질 수도 있고 가지지 않을 수도 있는 객체를 담는 클래스이다. 만약 값이 있다면 isPresent()메소드를 사용할 때 true를, 값이 없다면 빈 것으로 판단하여 false를 반환한다. orElse()메소드를 사용하면 값이 있다면 그 값을, 없을 때는 기본값을 반환한다. 값이 Null인지 아닌지 알 수 없을 때 ofNuallble() 메소드를 사용하면 null일 때 NullPointerException으로 처리하지 않고 Optional 객체를 만들 수 있다. 덕분에 if(a == null)와 같이 null인지 여부를 확인하기 위해 조건문을 여러 개 작성하여 코드를 복잡하게 작성할 필요가 없어졌다. Optional을 ..
-
[자바의 정석] Ch.14 람다와 스트림스터디플래너/공부하기 2022. 9. 3. 11:59
2. 스트림(Stream) 2.1 스트림이란? 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. 스트림을 사용하면 데이터 소스가 무엇이든 간에 같은 방식으로 다룰 수 있어 코드의 재사용성이 높아진다. 배열이나 컬렉션에 국한되지 않고 파일에 저장된 데이터도 같은 방식으로 다룰 수 있다. public class StreamEx { public static void main(String[] args) { String[] arr = {"aaa", "ddd", "ccc"}; List list = Arrays.asList(arr); //스트림을 이용하여 문자열 배열 arr와 문자열 List list를 정렬하여 출력하기 Stream strStream1 = list.stre..
-
[자바의 정석] Ch.14 람다와 스트림스터디플래너/공부하기 2022. 8. 28. 14:41
1. 람다식(Lambda expression) 1.1 람다식이란 정수 n을 매개변수로 받아 길이 n의 배열을 만들고 1부터 5까지의 숫자를 무작위로 배열에 넣는 메소드를 만들어보자. int N = scan.nextInt(); int[] arr = new int[N]; public void maekArray(int N){ for(int i=0; i (int)(Math.random() * 5) + 1); 람다식(Lambda expression)은 메서드를 하나의 식으로 표현하여 함수를 간략하고 명확한 식으로 표현할 수 있게 해준다. 람다식은 익명함수(anonymous function)라고도 한다. 람다식을 이용하면 메서드를 사용하기 위해 클래스와 객체를 만들어야하는 번거로움도 없고 메서드의 이름과 반환값이 ..
-
[자바의 정석] Ch.13 쓰레드스터디플래너/공부하기 2022. 8. 13. 21:22
9. 쓰레드의 동기화 String name = "자바의 정석"이라는 자원을 두고 쓰레드 A와 쓰레드 B가 함께 작업을 한다고 가정해보자. 쓰레드 A는 2초 후 "자바의 정석"을 출력하고싶어하고 쓰레드 B는 name을 "스프링의 정석"으로 바꾼 뒤 이를 출력하고자 한다. 쓰레드 A가 먼저 작업한 다음 쓰레드 B가 작업하지만 쓰레드 A가 2초간 대기하는 사이 쓰레드 B가 끼어들어서 스프링의 정석으로 바꿨기 때문에 쓰레드 A와 B 모두 스프링의 정석을 출력한다. 의도한 대로 작업하려면 어떻게 해야할까? String name="자바의 정석"을 임계 영역(critical section)으로 정하고 이 데이터가 갖고있는 lock을 획득한 쓰레드만 이 영역의 코드를 수행할 수 있게 한다. lock을 가진 쓰레드가 작..
-
[자바의 정석] Ch.13 쓰레드스터디플래너/공부하기 2022. 7. 24. 10:03
6. 쓰레드 그룹(thread group) 서로 관련된 쓰레드를 그룹으로 다루기 위한 것으로 쓰레드를 그룹으로 묶어서 관리할 수 있다. 쓰레드 그룹에 다른 쓰레드 그룹을 포함시킬 수 있고 자신이 속한 쓰레드 그룹이나 하위 쓰레드 그룹을 변경할 수 있지만 다른 쓰레드 그룹의 쓰레드를 변경할 수 없다. 자바 어플리케이션이 실행되면 JVM은 main 쓰레드 그룹과 system 쓰레드 그룹을 만들고 JVM운영에 필요한 쓰레드들을 생성해서 쓰레드 그룹에 포함시킨다. 모든 쓰레드 그룹은 main 쓰레드 그룹의 하위 쓰레드 그룹이 되고, 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main쓰레드 그룹에 속하게 된다. Thread 클래스의 getThreadGroup()메소드를 이용하면 어떤 쓰레드 그룹에 속..