Java/Java 개념

학습 // Java // IO

문스코딩 2018. 10. 16. 20:06
업데이트 :: 2018.10.16



IO package

package docs.io;

import java.io.*;

/**
 * # 스트림이란
 *
 *  스트림은 단일 방향으로 연속적으로 흘러가는 것을 말합니다.
 *  입력스트림 :: 프로그램이 데이터를 입력
 *  출력스트림 :: 프로그램이 데이터를 출력
 *
 * # 자바의입출력
 *
 *  자바는 입출력 API를 "java.io" 패키지에서 처리합니다.
 *  스트림은 크게 두 종류로 구분되고 사용하는 파일이 다릅니다.
 *      - 바이트(byte)기반 스트림
 *      - 문자(character)기반 스트림입
 *
 * */
public class Doc_IO {

    public static String BASE_FILE = System.getProperty("user.dir") + "/txt/tutorial.txt";

    public static void main(String[] args) {

        readByByte();
        writeByByte();
        readByChar();
        writeByChar();

    }

    /**
     * read() - 바이트단위 InputStream
     *
     * @date 2018.10.16
     * @author SDM
     * @version 1.0
     * */
    public static void readByByte() {

        /*
         * InputStream
         *   - FileInputStream
         *   - BufferedInputStream
         *   - DataInputStream
         * */

        try {

            /*
             * File f = new File(file);
             * InputStream is = new FileInputStream(f);
             * */
            InputStream is = new FileInputStream(BASE_FILE);

            int readByte;
            int readByteSize;
            byte[] readBytes = new byte[100];

            /*
             * ### read() => int ###
             *
             * => 1바이트를 읽고 4바이트 int로 리턴
             * */
            while((readByte = is.read()) != -1) { /**/ }

            /*
             * ### read(byte[] b) => int ###
             *
             * => 바이트 배열의 길이만큼 바이트를 읽고 배열에 저장, 그리고 읽은 바이트수 리턴
             * */
            while((readByteSize = is.read(readBytes)) != -1) { /**/ }

            /*
             * ### read(byte[] b, int off, int len) => int ###
             *
             * => 바이트 배열에 'off' 만큼 떨어진 위치에 'len' 만큼 바이트를 읽고 배열에 저장, 그리고 읽은 바이트수 리턴
             * => is.read(readBytes) == is.read(readBytes, 0, readBytes.length);
             * */
            readByteSize = is.read(readBytes, 0, 100);

            /*
             * ### close() => void ###
             *
             * => 시스템 자원해제
             * */
            is.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * write() - 바이트단위 OutputStream
     *
     * @date 2018.10.16
     * @author SDM
     * @version 1.0
     * */
    public static void writeByByte() {

        /*
         * OutputStream
         *   - FileOutputStream
         *   - PrintStream
         *   - BufferedOutputStream
         *   - DataOutputStream
         * */

        try {

            /*
             * @TIP 파일이 덮어씌어 지는게 싫다면, 2번째 매개값에 "true"를 입력해주세요.
             * OutputStream os = new FileOutputStream(file, true);
             * */
            OutputStream os = new FileOutputStream(BASE_FILE);
            byte[] data = "ABCDEF".getBytes();

            /*
             * ### write(int b) => void ###
             *
             * => 1바이트를 보냄
             * */
            for(int i=0; i<data.length; i++)
                os.write(data[i]);

            /*
             * ### write(byte[] b) => void ###
             *
             * => 바이트배열의 모든 바이트를 보냄
             * */
            os.write(data);

            /*
             * ### write(byte[] b, int off, int len) => void ###
             *
             * => 바이트배열['off'] 부터 'len' 개의 바이트를 보냄
             * */
            os.write(data, 1, 2);

            /*
             * ### flush() => void ###
             *
             * => 출력스트림은 내부에 작은 버퍼가 있어 데이터가 출력되기 전에 버퍼에 쌓았다가 순서대로 출력
             * => 버퍼에 잔류하는 모든 바이트를 출력하고 버퍼를 비움
             * */
            os.flush();

            /*
             * ### close() => void ###
             *
             * => 시스템 자원해제
             * */
            os.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * read() - 문자단위 InputStream (Reader)
     *
     * @date 2018.10.16
     * @author SDM
     * @version 1.0
     * */
    public static void readByChar(){

        /*
         * Reader
         *   - FileReader
         *   - BufferedReader
         *   - IntputReader
         * */

        try {
            Reader reader = new FileReader(BASE_FILE);

            int readChar;
            int readCharSize;
            char[] cbuf = new char[100];

            /*
             * ### read() => int ###
             *
             * => 한개의 문자를 읽고 리턴
             * */
            while((readChar = reader.read()) != -1) { /**/ }

            /*
             * ### read(char[] c) => int ###
             *
             * => 문자 배열에 읽은 문자를 저장하고, 읽은 문자수를 리턴
             * */
            while((readCharSize = reader.read(cbuf)) != -1) { /**/ }

            /*
             * ### read(char[] c, int off, int len) => int ###
             *
             * => 문자 배열의 'off' 부터 'len' 개의 문자를 저장, 읽은 문자수를 리턴
             * => reader.read(cbuf) == cbuf.read(cbuf, 0, cbuf.length);
             * */
            readCharSize = reader.read(cbuf, 0, 100);

            /*
             * ### close() => void ###
             *
             * => 시스템 자원해제
             * */
            reader.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * write() - 문자단위 OutnputStream (Writer)
     *
     * @date 2018.10.16
     * @author SDM
     * @version 1.0
     * */
    public static void writeByChar(){

        /*
        * Writer
        *   - FileWriter
        *   - BufferedWriter
        *   - PrintWriter
        *   - OutputWriter
        * */

        try {
            /*
             * @TIP 파일이 덮어씌어 지는게 싫다면, 2번째 매개값에 "true"를 입력해주세요.
             * Writer writer = new FileWriter(file, true);
             * */
            Writer writer = new FileWriter(BASE_FILE);

            String str = "Hello Java?";
            char[] data = str.toCharArray();

            /*
             * ### write(int c) => void ###
             *
             * => 주어진 한 문자를 보냄 (끝의 2바이트)
             * */
            for( int i=0; i< data.length; i++ )
                writer.write(data[i]);

            /*
             * ### write(char[] cbuf) => void ###
             *
             * => 주어진 문자 배열을 보냄
             * */
            writer.write(data);

            /*
             * ### write(char[] cbuf, int off, int len) => void => void ###
             *
             * => 문자 배열의 'off' 부터 'len' 만큼을 보냄
             * */
            writer.write(data, 1, 2);

            /*
             * ### write(Strig str) => void ###
             *
             * => 주어진 문자열을 보냄
             * */
            writer.write(str);

            /*
             * ### write(Strig str, int off, int len) => void ###
             *
             * => 문자열의 'off' 부터 'len' 길이 만큼을 보냄
             * */
            writer.write(str, 1, 3);

            /*
             * ### flush() => void ###
             *
             * => 출력스트림은 내부에 작은 버퍼가 있어 데이터가 출력되기 전에 버퍼에 쌓았다가 순서대로 출력
             * => 버퍼에 잔류하는 모든 바이트를 출력하고 버퍼를 비움
             * */
            writer.flush();

            /*
             * ### close() => void ###
             *
             * => 시스템 자원해제
             * */
            writer.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


Created by MoonsCoding

e-mail :: jm921106@gmail.com

반응형

'Java > Java 개념' 카테고리의 다른 글

학습 // Java // Optional  (0) 2018.12.05
학습 // Java // IO // Console  (0) 2018.10.16
학습 // Java // Stream // Parallel  (0) 2018.10.01
학습 // Java // Stream // Group  (0) 2018.10.01
학습 // Java // Stream // Collect  (0) 2018.10.01