"๋˜ ๋‚˜์•ผ."

"์•ˆ๋…•, ์—˜๋ฆฌ!"

"์˜ค๋Š˜์€ 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 ์— ์“ฐ๋ฉด ๋‚ด๋ถ€ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋„ ๋™์ ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

"์ง€๋‚œ ์ˆ˜์—…์—์„œ ์ฃผ์–ด์ง„ ์˜ˆ๋ฅผ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค."

reader ๊ฐœ์ฒด์—์„œ ์ฝ๊ณ  writer ๊ฐœ์ฒด์— ์“ฐ๊ธฐ:
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);
 }
}

"๋ฌธ์ž ๋Œ€์‹  ๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."

InputStream ๊ฐ์ฒด์—์„œ ์ฝ๊ณ  OutputStream ๊ฐ์ฒด์— ์“ฐ๊ธฐ:
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๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋‹ค์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ์ด ์ž‘์—…์€ ๋งค์šฐ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค."

๋ฌธ์ž์—ด์„ 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)

"ํ˜•์‹ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ํ˜•์‹ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."

๋ฌธ์ž์—ด์„ ByteArray๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋‹ค์‹œ ์—ญ๋ณ€ํ™˜
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 ํด๋ž˜์Šค์˜ ํฌ๋งท ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ–ˆ์–ด."

"์ง€๊ธˆ์€ ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค."

"๊ณ ๋งˆ์›Œ, ์—˜๋ฆฌ."