BufferedInputStream은 8K이상 읽을 땐 성능저하된다는데?
익명(59.16)
2022-04-17 02:10
추천 0
댓글 21
다른 게시글
-
ISTJ 나온 사람?익명(1.239) | 22.04.17추천 0
-
국비가는애들 대부분 백엔드함??익명(223.38) | 22.04.17추천 0
-
ERD에서 점선이 한 개도 없으면 문제 있나요?ㅇㅇㅇ(1.230) | 22.04.17추천 0
-
사람에 관심 없는편인거 먼가 뼈저리게느끼네 [2]공기역학(experimenter) | 22.04.17추천 0
-
국비충 포폴 질문Nell(220.122) | 22.04.17추천 0
-
Nell이란 사용자도 세월호 리본과 노무현 [2]만남의광장(aerohong) | 22.04.17추천 0
-
프붕이 프로그래머스 1단계 다 풀었는데 고민좀 [4]익명(118.216) | 22.04.17추천 0
-
오픈소스 뿌리는 애들 상줘야함 ㅇㅇ [2]익명(59.11) | 22.04.17추천 0
-
re2002가 세월호 희생자 조롱 글 올렸다 [1]만남의광장(aerohong) | 22.04.17추천 0
-
코드 해석좀해조익명(222.237) | 22.04.17추천 0
그렇구나... 사소해 보이는 내용이었지만 하나 배우고 가네.
해당 댓글은 삭제되었습니다.
저기서도 Direct Buffering이 더 빠르다고 하지 않음?
네가 했던 실험이면 마지막 코드 수정한 버전 얘기하는거야?
BufferedInputStream.read() vs FileInputStream.read(buffer)
이게 내가 했던 실험이고 저 문서의 어프로치2, 어프로치3도 똑같은 내용같음
nvm이 하는 이야기는 BufferedInputStream.read(buffer)랑 FileInputStream.read(buffer)를 비교해야 한다는 말 아니었어?
그리고 애초에 BufferedInputStream의 목적은 8K 단위로 읽어와서 바이트로 뿌려주려는 거 같음. 8K씩 읽어와서 8K씩 뿌려주는 놈이 아님.
BufferedInputStream.read(buffer) 처럼 사용하는게 올바른 practice라는 증거를 찾지 못했음. 예제들 전부 다 read() 쓰고 있고 그게 올바른 사용방법이라고 쓰여있음
그렇구나. 사실 오라클 공식도 저렇게 해놨으니... 난 아까 내가 올린 이 글 보고 한 말이었음.
https://www.geeksforgeeks.org/bufferedinputstream-read-method-in-java-with-examples/
내가 처음 주장한 것도 FileInputStream에서 byte[8192]를 잡으면 BufferedInputStream과 비슷할 것이라는 거였음. 근데 극적으로 속도 차이가 난다니 이해가 안 가서 물어본거구.. 그런데 스택오버플로우에서 syscall이 속도를 늦추는 원인이라고 하면 그걸 같게 해야 하지 않을까? 했던거구.. 내가 이해도가 부족했다면 미안하다
에효... BufferedInputStream은 버퍼 단위로 읽어들여서 개발자를 편하게 해주는 거지 그이상도 그이하도 아님. 내가 처음에 말한대로 InputStream이랑 성능 자체는 비슷하겠지 니가 큰 버퍼를 만들어서 직접 버퍼 관리를 해버리면? 그리고 너가 링크 건 스오플 답변 말인데 잘 읽어봐 내가 한 말이랑 전혀 다르지 않음. 큰 사이즈의 버퍼를 만들어서 읽어들이면 차이가없다. 버퍼크기가 충분히 크면 BufferedInputStream이 InputStream에 비해 오버헤드가 있어서 성능이 더 저하될 수 있다. 이건 내가 다 말해준 내용 아니야?
그리고 왜 8k에 집착하는지는 모르겟는데 8k 기점으로 뭔가 급격하게 변한다는게 아니고 대충 이정도 크기면 BufferedInputStream이 딱히 의미가 없다는 뜻이야
아마 8k가 BufferedInputStream의 default buf size라서?
ㅇㅇ 니 말대로 편하게 해준다는 의미 뿐인 거 같음
같은 질문 발견함
https://stackoverflow.com/questions/52640010/is-fileinputstream-not-buffered-and-why-bufferedinputstream-is-faster
"BufferedInputStream.read(buffer) 처럼 사용하는게 올바른 practice라는 증거를 찾지 못했음. 예제들 전부 다 read() 쓰고 있고 그게 올바른 사용방법이라고 쓰여있음" 동일한 비교를 하라는 거지 read()쓰지 말고 read(buffer)를 쓰라는 말이 아닌거 알지? 똑같이 read()를 쓰던지 read(buffer)를 쓰던지 해서 비교하라고. 정 못알아 듣겠으면 실제로 무언가 연산을 하는 테스트를 해봐. InputStream이랑 BufferInputStream을 써서 각각 byte를 전부 곱하는 연산을 해서 하면 둘의 차이가 별로 없다는 걸 알 수 있을거야. 그땐 니가 read()를 쓰든 read(buffer)를 쓰든 별 의미가 없겠지 둘다 바이트 단위로 연산이 들어가니
결론적으로 말하면 FileInputStream.read(buffer)나 BufferedInputStream.read()는 결국 전자가 buffer를 직접 만들어서 쓰는거니까 불편한거고, 근본적으로는 같으니까 속도 면에서는 별 차이가 없어야한다는 거지? 나도 그렇게 생각했는데 성능이 2~3배 차이난다는게 좀 신기해서 실험을 물어본건데..
BufferedInputStream.read(buffer) vs FileInputStream.read(buffer)가 아니라 BufferedInputStream.read() vs FileInputStream.read(buffer)를 하되 for (int i = 0; i < buffer.length; i++) data = buffer[i] 로 했어야 공평한 실험이었을 거 같음
file io를 줄이기 위해 버퍼에 8k 단위로 불러와서 1 바이트씩 뿌려주는 개념이니까
애초에 InputStream이 데이터를 byte 단위로 처리하기 위한 목적이니까 그랬어야 했네
역시 글로 공부하는 것보다 소스 까고 실험하는 게 뇌에 잘 각인되네 떙큐 에브리원