-
[Java9] IOJava/기본 2018. 5. 14. 00:19728x90반응형
InputStream
- java.io.InputStream
- 읽기/복사에 관한 3개의 메소드 추가됨
- readAllBytes() : intput stream의 모든 바이트들을 읽음
- readNBytes(byte[] b, int off, int len) : b배열의 off위치부터 len byte만큼 읽음
- transferTo(OutputStream out) : input stream에서 모든 bytes를 읽고, OutputStream에 씀
- 이제 Apache Commons IO 같은거 안써도 됨
The ObjectInputStream Filter
- 객체를 저장하거나 네트워크 전송을 위해 직렬화 함
- 데이터를 객체로 역직렬화 할 때 데이터가 유효한지 검증이 필요함
- 이제 입력을 필터링하기 위해 java.io.ObjectInputStream에 새로운 함수형인터페이스인 java.io.ObjectInputFilter를 사용할 수 있음
- ObjectInputFilter에는 Status checkInput(FilterInfo filterInfo); 메소드가 있음
- ObjectInputFilter.FilterInfo에는 역직렬화되는 객체와 ObjectInputStream객체의 통계 정보가 포함 (아래 표1.1)
표 1.1 ObjectInputFilter.FilterInfo의 메소드
메소드
설명
Class<?> serialClass()
역직렬화 되지 않은 객체의 클래스를 반환
long arrayLength()
역직렬화 된 객체가 배열이면, 배열의 길이를 반환 (그렇지 않으면 -1반환)
long depth()
객체 그래프에서 현재 객체의 깊이를 반환
long references()
현재 참조객체의 수를 반환
long streamBytes()
현재 소비된 bytes의 수를 반환
표 1.2 ObjectInputFilter.Status
Status
설명
ALLOWED
역직렬화 허용
REJECTED
역직렬화 거부
UNDECIDED
필터가 역직렬화 허용/거부 정하지 못함
- ObjectInputFilter에서 상태를 REJECTED 설정 해두면 ObjectInputStream가 java.io.InvalidClassException를 발생(throw)시킴
- setObjectInputFilter() 메소드를 이용하여 필터 설정
- setSerialFilter
- static 메소드인 setSerialFilter를 설정할 수 있음. 개별 필터가 설정 안되어 있으면 사용됨
- String 패턴을 이용하여 작성하기 쉬움
- 세미콜론(;)을 이용하여 여러개의 패턴 작성 가능
출처
반응형'Java > 기본' 카테고리의 다른 글
[Mac] 기본 JDK (JAVA_HOME) 설정하기 (0) 2021.03.25 [Java8] Method Reference (메서드 참조) - 생성 방법 (0) 2019.12.28 [Java9] Variable Handles (1) 2018.05.02 [Java9] try-with-resources Improvement (0) 2018.04.28 Reflection 리플렉션 (0) 2018.01.21