Java I/O에서 "Stream"과 "Buffer"는 정확히 무엇을 의미합니까?
에 입력요.BufferedReader
.
알고 .Stream
★★★★★★★★★★★★★★★★★」Buffer
또, 이 코드 라인의 기능은 다음과 같습니다.
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Java에는 입출력(I/O)에 대한 두 가지 클래스, 즉 스트림과 리더/라이터가 있습니다.
스트림(InputStream
,OutputStream
파일, 네트워크 또는 기타 디바이스에서 바이너리 데이터를 읽고 쓰는 데 사용됩니다.
리더와 라이터는 텍스트(문자)를 읽고 쓰기 위한 것입니다.이 계층은 문자열 인코딩을 사용하여 이진 데이터(바이트)를 문자로 변환한 후 되돌리는 스트림 맨 위에 있는 계층입니다.
디스크에서 바이트 단위로 데이터를 읽는 것은 매우 비효율적입니다.속도를 높이는 한 가지 방법은 버퍼를 사용하는 것입니다.한 번에 1바이트씩 읽는 것이 아니라 수천 바이트를 한 번에 읽고 버퍼에 저장하여 메모리에 저장합니다.그런 다음 버퍼 내의 바이트를 하나씩 확인할 수 있습니다.
Oracle의 Java I/O 튜토리얼에서 자세히 설명합니다.
입력한 코드 행을 보면 다음과 같습니다.
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.in
는 입니다.InputStream
해서 '만들다'를 만들어요InputStreamReader
.System.in
다음 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.BufferedReader
.
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.BufferedReader
InputStreamReader
나오는 것System.in
.
버퍼:
물리 메모리 스토리지의 영역으로서, 데이터를 한 장소에서 다른 장소로 이동하는 동안 일시적으로 데이터를 저장합니다.대부분의 경우 물리적 메모리 스토리지는 RAM(랜덤 액세스 메모리)입니다.
그러나 이 질문의 맥락에서 Buffer는 데이터를 읽고 쓸 때 사용됩니다.데이터를 이동할 때 사용할 필요가 없습니다.
버퍼의 예:시스템에 4GB의 RAM이 있는 경우 시스템에 의해 버퍼용으로 4KB의 메모리(RAM)가 할당될 수 있습니다.KB - 킬로바이트, GB - 기가바이트
I/O 스트림:
I/O 스트림은 입력 소스 또는 출력 대상을 나타냅니다.스트림은 디스크 파일, 디바이스, 기타 프로그램, 메모리 어레이 등 다양한 종류의 소스 및 대상을 나타낼 수 있습니다.
I/O는 Input/Output을 의미합니다.
따라서 Input Stream은 디스크 파일, 네트워크 연결 등의 입력 소스가 될 수 있습니다.
또한 출력 스트림은 디스크 파일, 네트워크 연결 등의 출력처가 될 수 있습니다.
JAVA 공식 문서에 따르면 스트림은 3가지 유형으로 구성됩니다.
바이트 스트림:
8비트 바이트의 입출력을 수행합니다.모든 바이트 스트림 클래스는 InputStream 및 OutputStream의 하위 클래스입니다.
바이트 입력 스트림 클래스는 입력을 원시 바이트로 가져옵니다.바이트 출력 스트림 클래스는 출력을 원시 바이트로 제공합니다.
InputStream
- 직접 알려진 서브클래스
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.
OutputStream
- 직접 알려진 서브클래스
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
문자 스트림:이러한 계층은 바이트 스트림 위에 있는 계층입니다.문자 인코딩을 사용하여 바이트(이진수 데이터)를 문자로 변환하고 문자를 바이트로 변환합니다.
Reader
- 직접 알려진 서브클래스
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
Writer
- 직접 알려진 서브클래스
BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
바이트 스트림 및 문자 스트림은 버퍼되지 않은 I/O를 사용합니다.
즉, 각 읽기 또는 쓰기 요청은 기본 OS에 의해 직접 처리됩니다.이러한 요구는 디스크액세스, 네트워크액티비티, 또는 비교적 비용이 많이 드는 다른 조작을 트리거하는 경우가 많기 때문에, 프로그램의 효율이 크게 저하될 가능성이 있습니다.이러한 오버헤드를 줄이기 위해 Java 플랫폼은 버퍼링된 I/O 스트림을 구현합니다.
버퍼링된 스트림:
버퍼링된 입력 스트림은 버퍼로 알려진 메모리 영역에서 데이터를 읽습니다. 네이티브 입력 API는 버퍼가 비어 있을 때만 호출됩니다.
마찬가지로 버퍼링된 출력 스트림은 버퍼에 데이터를 쓰고 네이티브 출력 API는 버퍼가 꽉 찬 경우에만 호출됩니다.
프로그램은 버퍼링되지 않은 스트림 객체를 버퍼링된 스트림 클래스를 위해 컨스트럭터에 전달되는 랩핑 어디를 사용하여 버퍼링되지 않은 스트림을 버퍼링된 스트림으로 변환할 수 있다.
예제:
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
버퍼링되지 않은 스트림을 랩하기 위해 사용되는 버퍼링된 스트림클래스는 다음 4가지가 있습니다.
bufferedByte streams를 작성하려면BufferedInputStream
★★★★★★★★★★★★★★★★★」BufferedOutputStream
②.
buffered Character Streams를 작성하려면BufferedReader
★★★★★★★★★★★★★★★★★」BufferedWriter
②.
java.io 패키지에 대해 누가 작업을 시작하는지 항상 염두에 두고 있는 질문입니다.질문에 답하기 위해 InputStreamReader와 BufferedReader라는 용어는 Java 객체만을 나타냅니다(특별한 것은 없습니다). 단, 파일, 객체 등의 다른 입력/출력과의 읽기/쓰기 등의 IO 조작용으로 작성됩니다.
자, 이제 시작합시다.
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
InputStreamReader는 바이트 입력 스트림을 읽기 위한 클래스입니다.단, 각 바이트를 읽는 것은 비용이 많이 들기 때문에 버퍼링(디케이터 패턴)하기 위해 BufferedReader로 감싸고 있습니다.
따라서 읽기 시작 전부터 bufferedReader는 읽기 작업을 수행할 때 일부 바이트 청크를 레지스터에 저장합니다.콘솔/파일 읽기보다 훨씬 비용이 적게 드는 위치에서 읽을 수 있지만 InputStreamReader의 경우 디스크 액세스 작업이 발생할 때마다 읽기 작업을 수행합니다.
스트림은 포인트 간에 전달되는 연결 및 실제 정보입니다.버퍼는 스트리밍된 데이터의 일부 또는 전부를 저장하고 이를 출력 장치에 공급하는 스토리지 컨테이너입니다.
물론 중요한 점은 스트림이 데이터를 표시하는 데 필요한 데이터 속도를 초과하여 느려지면 출력이 일시 중지된다는 것입니다.버퍼가 이를 방지합니다.
버퍼는 메모리 내에서 주변 장치로부터의 데이터 스트림을 저장하는 데 사용되는 부분입니다.그런 다음 이 버퍼에서 이 데이터 스트림이 수집되어 변수에 저장됩니다.스트림은 데이터의 연속 흐름으로 정의할 수 있습니다.
'입출력'이라는 용어는 버퍼 안팎으로 데이터를 이동하는 것에 불과합니다.항상 이 점을 명심하세요.프로세스는 버퍼로부터 데이터를 드레인(쓰기 동작)하거나 버퍼에 데이터를 채우는(읽기 동작) 것을 오퍼레이팅 시스템에 요구함으로써 I/O를 실행한다.
데이터 이동 방법의 논리도
간단히 말하면, 키보드에 데이터를 입력할 때 데이터가 파이프(스트림)를 통해 버퍼로 이동한 다음 버퍼에서 디스크로(쓰기 작업) 이동한다고 가정해 보십시오.마찬가지로 데이터가 디스크에서 버퍼로, 버퍼에서 콘솔로 이동하면 읽기 작업이 됩니다.
링크를 읽으면 더 잘 이해할 수 있습니다.도움이 됐으면 좋겠다!
Java에서의 버퍼란
링크 설명을 여기에 입력하십시오.
언급URL : https://stackoverflow.com/questions/15984789/what-exactly-does-stream-and-buffer-mean-in-java-i-o
'programing' 카테고리의 다른 글
새 폴더 작성 방법 (0) | 2022.10.19 |
---|---|
JavaScript는 붙여넣기 이벤트에서 클립보드 데이터를 가져옵니다(크로스 브라우저). (0) | 2022.10.19 |
Windows 머신에 JDK가 설치되어 있는 장소를 확인하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
메서드 매개 변수 이름을 가져오는 방법 (0) | 2022.10.02 |
MySQL의 여러 업데이트 (0) | 2022.10.02 |