20日目補助ストリームとI/O!


FileInputStream


ファイルからバイト単位で取得する場合に使用
画像、オーディオ、ビデオ、テキストなど、任意のタイプのファイルを読み込むことができます.
InputStreamサブクラス

FileOutputStream


ファイルにデータをバイト単位で格納
画像、オーディオ、ビデオ、テキストなどのすべてのタイプのデータをファイルとして保存
OutputStreamサブクラス

FileReader


テキストファイルからデータを取得する
リーダサブクラス

FileWriter


テキストファイルに文字データを格納する
Writerサブクラス

ほじょりゅう


ストリームは他のストリームに接続され、さまざまな便利な機能を提供します.
≪セカンダリ・フロー・チェーン|Help Flow Chain|oem_src≫:ロールを実行するために他のセカンダリ・フローに関連付けられます.

-文字変換補助ストリーム


ソースストリームはバイトベースのストリームですが、データが文字の場合に使用します。


文字セットのタイプを指定できるので、異なる文字を入力できます.
-------------------------------------------입력 문자변환 보조스트림 ------------------------------
	public static void main(String[] args) throws Exception {
		InputStream is = System.in;
		
		Reader reader = new InputStreamReader(is); // 보조스트림으로 연결 보조스트림은 자식중 하나다
		
		int readCharNo;
		
		char[] cbuf = new char[100]; // 보조스트림 연결해서 byte로 안해도 된다.
		
		System.out.println("prompt >>>");
		while ((readCharNo = reader.read(cbuf)) != -1 ) {
			
			String data = new String(cbuf, 0 ,readCharNo);
			
			System.out.println(data);
		} // while

		
	}//main
	
-------------------------------------------출력 문자변환 보조스트림---------------------------------
	public static void main(String[] args) throws Exception {

		FileOutputStream fos = new FileOutputStream("C:/Temp/file.txt");
		
		// 바이트기반의 OutputStream => 문자기반의  Writer로 변환해주는 보조스트림 
		Writer writer = new OutputStreamWriter(fos);
//		Writer writer = new OutputStreamWriter(fos, "UTF-8");
//		Writer writer = new OutputStreamWriter(fos, Charset s);  <<이 부분


		// Charset 타입의 객체를 얻는 방법 :
		Charset charset1 = Charset.defaultCharset();  // MS949 (windows)
		Charset charset2 = Charset.forName("UTF-8");  // UTF-8
		Charset charset3 = StandardCharsets.UTF_8;  // UTF-8
		
		
		
		
		String data = "바이트 출력 스트림을 문자 출력 스트림으로 변환 ";
		
		writer.write(data);
		
		writer.flush();
		
		writer.close();
		
		System.out.println("파일 저장이 끝났습니다.");	
	} //main

-パフォーマンス向上支援フロー


(1)I/O性能に影響するI/Oソース


I/Oソースと直接対話せずにバッファと操作
バッファは、速度差の大きい2つのターゲットがI/Oを実行する際に効率を向上させるための一時的な記憶領域です.

>説明:


CPU内部のキャッシュメモリに比べて、バッファの使用メモリ速度は遅くなりますが、使用メモリ速度はずっと速いです.セカンダリメモリは、プライマリメモリのバッファにデータを集中します.CPUの処理速度が速いため、他の滞積を処理した後、空き時間にバッファをチェックしてデータがすべて蓄積されていることを確認し、データがすべて蓄積されている場合はインポートして一度に処理することがあります.

(2)BufferedInputStream, BufferedReader


(バッファ使用前と使用後の差は227倍です.)

(3)BufferedOutputStreamとBufferedWriter


-主タイプI/O補助フロー



-プリンタのセカンダリフロー


-print fの使い方

-PrintStream

グループ化作業があります.

public class FileOutputStreamExample3 {

	// 파일 복사 예제
	public static void main(String[] args) throws Exception {
		
		while (true) {
	         
	         // 1. 폴더 만들기
	         // 날짜로 폴더이름
	         Date now = new Date();
	         String format = "yyyy-MM-dd HH.mm";
	         DateFormat df = new SimpleDateFormat(format);
	         String fileName = df.format(now);

	         // 폴더 새로 생성
	         File dir = new File("C:/Temp/" + fileName);
	         if (dir.exists() == false) {
	            dir.mkdirs();
	         }
	         
	        
	         Calendar now2 = Calendar.getInstance();
	         int second = now2.get(Calendar.SECOND);
	         if(dir.exists() == true && (second == 1 || second == 31)) {
	            // 2. 파일 복사
	            // 파일 이름 랜덤으로 바꿔줌.
	            UUID uuid = UUID.randomUUID();
	            
	            String sourceFileName = "C:/Temp/source.pdf";
	            String targetFileName = "C:/Temp/" + fileName + "/" + uuid + ".pdf";
	            
	            FileInputStream fis = new FileInputStream(sourceFileName);
	            FileOutputStream fos = new FileOutputStream(targetFileName);
	            
	            int readByteNo;
	            
	            byte[] readBytes = new byte[40];
	            
	            while ((readByteNo = fis.read(readBytes)) != -1) {
	               fos.write(readBytes, 0, readByteNo);         
	            } // while
	            
	            fos.flush();
	            fos.close();
	            fis.close();
	   
	         } //if
	         
	      } // while
		
	}//main 
    ```
    
    쓰레드를 사용한 방법도 있었지만 내 기준에서는 아직 우리는 쓰레드 진도를 나가지 않았기에 이것이 괜찮다고 생각했다. 
    이렇게 의견을 서로 주고받으면서도 내가 정리가 안되고 막던지는 의견 속에 받아들여지는 것도 있고 아닌 것도 있지만 대체로 걸러진다ㅋ..ㅋ
    나는 내 의견 들으려조차 않는 모습이 보여도 물론 시간이 없으니까.. 
    but 나 여기서 포기하지 않아 더 공부해서 내가 옳다는 것을 예쁘게 정리해서 보여주겠어 
    그래도 우리조 다들 너무 열심히하고 좋다! 나도 더 열심히하고 더 열심히 해서 축구발전에 이바지할 수 있는 컨텐츠를 만들거야 프로그래밍은 도구! 
    도구를 가장 잘사용해서 목적을 이룬다.