"또 나야."
"안녕, 엘리!"
"오늘은 BufferedReader 및 BufferedWriter 에 대한 모든 것을 알려드리려고 합니다 ."
"당신은 이미 그것들에 대해 나에게 말했지요. 그것들은 정말로 그렇게 복잡하지 않습니다."
"좋아. 그럼 BufferedReader가 어떻게 작동하는지 말해줘 ."
" BufferedReader 는 110/220V 변환기와 같습니다."
" 데이터를 읽을 Reader 개체를 BufferedReader 생성자 에 전달해야 합니다 . BufferedReader 개체는 Reader 에서 큰 데이터 청크를 읽고 내부적으로 버퍼에 저장합니다. 그래서 BufferedReader 를 사용하여 Reader 에서 읽는 것이 더 빠릅니다. Reader 에서 직접 읽는 것보다 ."
"그렇습니다. 그리고 BufferedWriter는 어떻습니까 ?"
"이것은 식은 죽 먹기입니다. FileWriter 에 쓴다고 가정해 봅시다 . 데이터는 즉시 디스크에 기록됩니다. 소량의 데이터를 자주 쓰면 디스크에 많이 부딪히게 되어 프로그램 속도가 많이 느려집니다. 그러나 BufferedWriter 를 '변환기' 로 사용하면 쓰기 작업이 훨씬 빨라 집니다 . 하나의 큰 청크. 이것이 훨씬 빠릅니다."
"음. 알아봐. 근데 뭘 잊은거야?"
"쓰기를 마친 후에는 BufferedWriter 개체에서 flush() 메서드를 호출하여 버퍼에 남아 있는 모든 데이터를 Writer 로 강제로 보내야 합니다 ."
"그리고 또 뭐?"
"또 뭐야? 오! 버퍼가 Writer 에 기록되지 않은 한 데이터를 삭제 및/또는 교체할 수 있습니다."
"아미고! 감명 받았습니다! 당신은 전문가입니다! 그럼 새로운 클래스인 ByteArrayStream 및 PrintStream 에 대해 말씀드리겠습니다 ."
"예를 들어, ByteArrayInputStream 및 ByteArrayOutputStream ."
"이 클래스는 StringReader 및 StringWriter 와 약간 비슷합니다 . StringReader는 문자열( String )에서 문자( char ) 를 읽지 만 InputStream은 바이트 배열( ByteArray )에서 바이트를 읽습니다."
StringWriter는 문자( char )를 문자열에 쓰고 ByteArrayOutputStream은 바이트를 내부 바이트 배열에 씁니다. StringWriter 에 쓰면 내부 문자열이 길어지고 ByteArrayOutputStream 에 쓰면 내부 바이트 배열도 동적으로 확장됩니다.
"지난 수업에서 주어진 예를 기억하십시오."
public static void main (String[] args) throws Exception
{
String test = "Hi!\n My name is Richard\n I'm a photographer\n";
StringReader reader = new StringReader(test);
StringWriter writer = new StringWriter();
executor(reader, writer);
String result = writer.toString();
System.out.println("Result: "+ result);
}
public static void executor(Reader reader, Writer writer) throws Exception
{
BufferedReader br = new BufferedReader(reader); String line; while ((line = br.readLine()) != null) { StringBuilder sb = new StringBuilder(line); String newLine = sb.reverse().toString();
writer.write(newLine);
}
}
"문자 대신 바이트를 사용하여 작동하는 경우의 모습은 다음과 같습니다."
public static void main (String[] args) throws Exception
{
String test = "Hi!\n My name is Richard\n I'm a photographer\n";
InputStream inputStream = new ByteArrayInputStream(test.getBytes());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
executor(inputStream, outputStream);
String result = new String(outputStream.toByteArray());
System.out.println("Result: "+ result);
}
public static void executor(InputStream inputStream, OutputStream outputStream) throws Exception
{
BufferedInputStream bis = new BufferedInputStream(inputStream);
while (bis.available() > 0)
{
int data = bis.read();
outputStream.write(data);
}
}
"모든 것이 위의 예와 동일합니다. String을 ByteArray로, Reader를 InputStream으로, Writer를 OutputStream으로 바꾼 것을 제외하고."
"다른 두 단계는 문자열을 ByteArray로 변환하고 다시 변환하는 것뿐입니다. 보시다시피 이 작업은 매우 쉽게 수행됩니다."
public static void main (String[] args) throws Exception
{
String test = "Hi!\n My name is Richard\n I'm a photographer\n";
byte[] array = test.getBytes();
String result = new String(array);
System.out.println("Result: "+ result);
}
"ByteArrayOutputStream에 이미 추가된 바이트를 가져오려면 toByteArray () 메서드를 호출하십시오."
"아. StringReader/StringWriter와의 유사성은 특히 당신이 나에게 지적한 후에 매우 강력합니다. Ellie, 정말 흥미로운 교훈에 대해 감사합니다."
"그렇게 급하게 어디로 가십니까? 아직 작은 선물이 있습니다. PrintStream 수업에 대해 말씀드리고 싶습니다."
"PrintStream? 그 클래스에 대해 처음 들어보네요."
"네. 특히 자바 공부 첫날부터 사용했다는 사실을 빼면요. System.out 기억하시나요 ? 음, System.out 은 System.out 의 정적(클래스) 변수입니다. 클래스이고 그 유형은... PrintStream ! 여기에서 이러한 모든 print, println 등의 메서드가 유래합니다."
"와우. 흥미진진하군. 어쩐지 그런 생각조차 해본 적이 없었어. 더 말해봐."
"좋습니다. 잘 들어보세요. PrintStream 클래스는 읽을 수 있는 출력을 위해 만들어졌습니다. 거의 전적으로 print 및 println 메서드로 구성됩니다. 이 표를 보십시오."
행동 양식 | 행동 양식 |
---|---|
void print(boolean b) |
void println(boolean b) |
void print(char c) |
void println(char c) |
void print(int c) |
void println(int c) |
void print(long c) |
void println(long c) |
void print(float c) |
void println(float c) |
void print(double c) |
void println(double c) |
void print(char[] c) |
void println(char[] c) |
void print(String c) |
void println(String c) |
void print(Object obj) |
void println(Object obj) |
void println() |
|
PrintStream format (String format, Object ... args) |
|
PrintStream format (Locale l, String format, Object ... args) |
"형식 문자열을 사용하여 데이터를 출력할 수 있도록 여러 형식 방법도 있습니다. 예를 들면 다음과 같습니다."
String name = "Kolan";
int age = 25;
System.out.format("My name is %s. My age is %d.", name, age);
My name is Kolan. My age is 25.
"그래, 기억나. 우리는 이미 String 클래스의 포맷 방법을 공부했어."
"지금은 여기까지입니다."
"고마워, 엘리."
GO TO FULL VERSION