방금 BufferedReader.
나는 정확히 용어의 의미는 무엇인지 알고 싶어 Stream하고 Buffer?
또한이 코드 줄은 우리에게 무엇을 제공합니까?
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
답변
Java에는 입력 및 출력 (I / O)을위한 두 가지 종류의 클래스, 즉 스트림 및 리더 / 라이터가 있습니다.
스트림 ( InputStream, OutputStream이러한 확장 다) 읽기, 파일, 네트워크, 또는 어떤 다른 장치에서 바이너리 데이터를 쓰기위한 것입니다.
독자와 작가는 텍스트 (문자)를 읽고 쓰기위한 것입니다. 이진 데이터 (바이트)를 문자 인코딩을 사용하여 문자 로 변환하고 역으로 변환하는 스트림 상단의 레이어입니다 .
디스크에서 바이트 단위로 데이터를 읽는 것은 매우 비효율적입니다. 속도를 높이는 한 가지 방법은 버퍼를 사용하는 것입니다. 한 번에 한 바이트를 읽는 대신 한 번에 수천 바이트를 읽고 메모리의 버퍼에 넣습니다. 그런 다음 버퍼의 바이트를 하나씩 살펴볼 수 있습니다.
I / O에 대한 Oracle의 Java 자습서 에서 자세히 설명합니다.
제공 한 코드 줄을 살펴 봅니다.
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는 입력 / 출력을 의미합니다.
따라서 입력 스트림은 디스크 파일, 네트워크 연결 등과 같은 입력 소스가 될 수 있습니다.
그리고 출력 스트림은 디스크 파일, 네트워크 연결 등과 같은 출력 대상이 될 수 있습니다.
JAVA 공식 문서 에 따르면 Streams는 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는 버퍼가 비어있을 때만 호출됩니다.
마찬가지로 버퍼링 된 출력 스트림은 데이터를 buffer에 쓰고 기본 출력 API는 버퍼가 가득 찬 경우에만 호출됩니다.
프로그램은 래핑 관용구를 사용하여 버퍼링 되지 않은 스트림을 버퍼링 된 스트림으로 변환 할 수 있습니다 . 여기서 버퍼링되지 않은 스트림 객체는 버퍼링 된 스트림 클래스 의 생성자에 전달됩니다 .
예:
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
버퍼링되지 않은 스트림을 래핑하는 데 사용되는 4 개의 버퍼링 된 스트림 클래스가 있습니다.
만들려면 버퍼 바이트 스트림 사용 BufferedInputStream및 BufferedOutputStream클래스.
만들려면 버퍼 스트림은 문자 사용 BufferedReader과 BufferedWriter클래스를.
답변
java.io 패키지 작업을 시작하는 모든 사람의 마음에있는 질문입니다. 귀하의 질문에 답하기 위해 InputStreamReader 및 BufferedReader는 자바 객체만을 나타내지 만 (특별한 것은 없음) 파일, 객체 등과 같은 다른 입력 / 출력에서 읽고 쓰는 것과 같은 io 작업을 위해 생성됩니다.
이제 줄을 서자
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
InputStreamReader는 바이트의 입력 스트림을 읽는 클래스이지만 각 바이트를 읽는 것은 비용이 많이 드는 작업이므로 버퍼링되도록 BufferedReader를 감싸고 있습니다 (데코레이터 패턴입니다).
따라서 읽기를 시작하기 전이라도 bufferedReader는 레지스터에 일부 바이트 청크를 저장하고 읽기 작업을 수행 할 때 발생합니다. 콘솔 / 파일에서 읽는 것보다 훨씬 저렴한 그 위치에서 읽습니다. 그러나 InputStreamReader의 경우 디스크 액세스 작업이 발생할 때마다 읽기 작업을 수행 할 때
답변
스트림은 지점간에 전달되는 연결 및 실제 정보입니다. 버퍼는 스트리밍 된 데이터의 일부 또는 전체를 저장하고이를 출력 장치에 공급하는 저장 컨테이너입니다.
물론 요점은 스트림이 데이터를 표시하는 데 필요한 데이터 속도 이상으로 느려지면 출력이 일시 중지된다는 것입니다. 버퍼는 이것을 방지합니다.
답변
버퍼는 주변 장치의 데이터 스트림을 저장하는 데 사용되는 메모리의 일부입니다. 그런 다음이 버퍼에서이 데이터 스트림을 수집하여 변수에 저장합니다. 스트림은 연속적인 데이터 흐름으로 정의 할 수 있습니다.
“입력 / 출력”이라는 용어는 데이터를 버퍼 안팎으로 이동하는 것 이상을 의미하지 않습니다. 항상 마음에 두십시오. 프로세스는 운영 체제에 데이터를 버퍼에서 드레인 (쓰기 작업)하거나 버퍼에 데이터를 채우도록 (읽기 작업) 요청하여 I / O를 수행합니다.
데이터 이동 방식에 대한 논리적 다이어그램
간단히 말해서 키보드로 데이터를 입력 할 때 데이터가 파이프 ( 스트림 )를 통해 버퍼로 이동 한 다음 버퍼에서 디스크 (쓰기 작업)로 이동한다고 상상해보십시오 . 마찬가지로 데이터가 디스크에서 버퍼로 , 버퍼에서 콘솔로 이동할 때 읽기 작업입니다.
더 나은 이해를 위해 링크를 읽을 수 있습니다. 도움이 되었기를 바랍니다!.
자바의 버퍼 란?
여기에 링크 설명을 입력하십시오.
답변
