2009-11-17 5 views
76

아래 코드를 살펴보십시오.java.io.PrintWriter와 java.io.BufferedWriter의 차이점은 무엇입니까?

// A.class 
File file = new File("blah.txt"); 
FileWriter fileWriter = new FileWriter(file); 
PrintWriter printWriter = new PrintWriter(fileWriter); 

// B.class 
File file = new File("blah.txt"); 
FileWriter fileWriter = new FileWriter(file); 
BufferedWriter bWriter = new BufferedWriter(fileWriter); 

이 두 가지 방법의 차이점은 무엇입니까?

언제 BufferedWriter에서 PrintWriter를 사용해야합니까?

답변

49

http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.htmlhttp://java.sun.com/javase/6/docs/api/java/io/PrintWriter.html의 차이점을 자세히 설명합니다.

PrintWriter를 사용하는 주된 이유는 printXXX 메서드 (예 : println (int))에 액세스하는 것입니다. 기본적으로 System.out을 사용하여 콘솔에 쓰는 것처럼 PrintWriter를 사용하여 파일에 쓸 수 있습니다.

BufferedWriter는 Java 메모리의 문자를 버퍼링하기 때문에 (또는 구현에 따라) 파일에 쓰기 작업을 수행하기 위해 C로 놓을 수 있으므로 파일 (또는 다른 것)에 효율적으로 쓸 수 있습니다.

"PrintReader"와 같은 개념이 없으므로 가장 가까운 것은 아마도 java.util.Scanner입니다.

+1

"파일을 쓰려면 C로 내려갑니다." .... UGH ... –

+2

@TritonMan 어떤 시점에서는 Java와 다른 운영체제와 상호 작용해야합니다. – TofuBeer

72

PrintWriter은 (println)를 더 방법을 제공하지만, 가장 중요한 (그리고 걱정) 차이점은 예외 제비 있다는 것입니다 알고 있어야.

나중에 오류가 발생했는지 확인하기 위해 으로 전화를 걸 수 있지만 일반적으로 콘솔에 쓰는 것과 같은 경우에는 PrintWriter을 사용하거나 원하지 않는 "빠른 n 개의 더러운"응용 프로그램에 사용합니다 예외로 인해 귀찮아하고 (장기적인 신뢰성이 문제가되지 않는 곳). 예외가되고 싶지 당신이 할 곳에 서식을 분명히 많은 곳에서 유용하다 - 「특수 형식의 능력 "과 측면이 같은 클래스에 번들로 제공됩니다"예외를 삼키지 않는다 "왜

는 잘 모르겠어요 삼켰다. 어떤 점에서 BufferedWriter 같은 능력을 얻는 것이 좋을 것입니다. ...

+0

@WindyFields : 아니오,'PrintStream'은'OutputStream'입니다. 'PrintWriter'는'Writer'입니다. –

7

두부의 대답에서 말한대로 둘 다 그들의 특기가 있습니다. 의 PrintWriter의 최대한 활용 (또는 다른 작가) 걸릴뿐만 아니라이 같은 필요 하나를 사용하여 BufferedWriter로 포장 할 수 버퍼 쓰기를 사용하려면

PrintWriter writer = new PrintWriter(
         new BufferedWriter (
          new FileWriter("somFile.txt"))); 
+2

@Jons는 PrintWriter가 예외를 삼킬 것이라고 언급 한 것을 기억합니다. checkError를 호출해야합니다. – MadMurf

+1

나는 왕실을 좋아했다. – Ogen

+1

적어도 현재의 openJDK 8 구현 (및 이전 버전)에서,'PrinterWriter'는 이미'BufferedWriter'를 생성합니다. – nimrodm

6

의 PrintWriter는 문자 모드에있는 작가의 인쇄 방법을 제공합니다.

BufferedWriter는 버퍼링 된 방법보다 효율적입니다. 그리고 시스템 플랫폼에 따라 newLine() 메서드가있어 텍스트 파일을 올바르게 조작 할 수 있습니다.

BufferedReader는 바이트를 문자로 변환하여 파일에서 텍스트를 읽을 수 있습니다. 그것은 한 줄씩 읽을 수 있습니다.

PrintReader가 없으므로 입력 형식에 따라 다른 Reader 구현을 선택해야합니다.

+0

문자 스트림에서 "Bytes"가 나온 이래로 ... – i2ijeya

-1

PrintWriter를 사용하는 이유는 이미 위에서 언급했으나 중요한 이유 중 하나는 파일 객체를 PrintWriter 생성자에 직접 전달하여 사용하기 쉽다는 것입니다.

File file=new File(“newfile.txt”); 
PrintWriter pw=new PrintWriter(file); 
1

일반적으로 라이터는 출력을 즉시 기본 문자 또는 바이트 스트림으로 보냅니다. 프롬프트 출력이 요구되지 않는 한, FileWriter 및 OutputStreamWriter와 같이 write() 작업에 많은 비용이 드는 Writer 주위에 BufferedWriter를 래핑하는 것이 좋습니다. 예를 들어,

참고 : 코드 블록의 텍스트 내용이 자동으로 줄 바꿈 파일에의 PrintWriter의 출력을 버퍼링합니다

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

입니다. 버퍼링을하지 않으면 print() 메서드를 호출 할 때마다 문자가 바이트로 변환되어 즉시 파일에 쓰여 지므로 매우 비효율적 일 수 있습니다.

0

BufferedWriter - 출력 스트림에 텍스트를 쓰고 문자 스트림의 문자를 버퍼링합니다. PrintWriter - 개체의 서식이 지정된 표현을 텍스트 출력 스트림에 인쇄합니다.