편집 기록

편집 기록
  • 프로필 신승혁님의 편집
    날짜2018.06.21

    Java io와 캐리지리턴


    안녕하세요. 항상 좋은 답변 감사합니다! 혼자 공부를 하는데 구글에 찾아도 이해하기 어려울때마다 해시코드를 찾고 있습니다. 정말로 감사합니다.

    io를 공부하고 있는데 출력값이 이상해서 여쭤보려고 왔습니다.

    package streamEx;
    
    import java.io.IOException;
    
    public class inputStreamTest2 {
    
        public static void main(String[] args) {
            byte[] input = new byte[5];
    
            int i = 0;
            int cnt = 0; // count
            int tot = 0; // total
            System.out.println("컨솔창에 입력하여라!");
            try {
                while((i= System.in.read(input)) != -1){ 
                    cnt++; // 반복문 횟수
                    tot += i;
    
                    System.out.println("i: "+i);
                    System.out.write(input, 0, i);
    
                }    System.out.println("cnt: "+cnt);
    
                System.out.println("읽은 byte수: "+tot);
                System.in.close();
                System.out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    제가 AppleTest라고 이클립스에 입력을 하면

    i: 5
    Applei: 5
    Test
    i: 1
    

    이렇게 출력되나

    cmd를 통한 출력을 하게 되면

    i: 5
    Applei: 5
    i: 1t
    

    이렇게 출력됩니다.

    제가 생각했을 때는

    i: 5
    Applei: 5
    i: 1
    Test
    

    으로 되어야한다고 생각했는데

    1. cmd에선 왜 덮어씌어서 출력이 될까요?
    2. 그리고 이클립스와 cmd의 출력의 차이가 왜 있는 것일까요?

    3. 배열에 대한 메모리구조에 대해 질문있습니다. 소스를 보시면 input이라는 5byte짜리 배열을 선언했는데 제가 "AppleTest"라는 글자를 넣으면 '/r''/n' 까지 포함하여 11byte를 입력한건데 오버플로우가 안되고 왜 전부다 출력이 되는건지 궁금합니다. 설명을 보면 input스트림에

      "_ _ _ _ /n /r t e s T e l p p A "(_는 빈칸입니다.)
      

      입력이 되고, output스트림에는

      " i:5\nApllei:5Test\ri:1\n\n "
      

      로 입력이 된다는데 그럼 input[0] = "Apple", input[1] = "Test\r", input[2] ="\n" 이런식으로 들어간다는 말인가요??

    비오는데 감기조심하세요~~~

  • 프로필 알 수 없는 사용자님의 편집
    날짜2016.05.06

    Java io와 캐리지리턴


    안녕하세요. 항상 좋은 답변 감사합니다! 혼자 공부를 하는데 구글에 찾아도 이해하기 어려울때마다 해시코드를 찾고 있습니다. 정말로 감사합니다.

    io를 공부하고 있는데 출력값이 이상해서 여쭤보려고 왔습니다.

    package streamEx;
    
    import java.io.IOException;
    
    public class inputStreamTest2 {
    
        public static void main(String[] args) {
            byte[] input = new byte[5];
    
            int i = 0;
            int cnt = 0; // count
            int tot = 0; // total
            System.out.println("컨솔창에 입력하여라!");
            try {
                while((i= System.in.read(input)) != -1){ 
                    cnt++; // 반복문 횟수
                    tot += i;
    
                    System.out.println("i: "+i);
                    System.out.write(input, 0, i);
    
                }    System.out.println("cnt: "+cnt);
    
                System.out.println("읽은 byte수: "+tot);
                System.in.close();
                System.out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    제가 AppleTest라고 이클립스에 입력을 하면

    i: 5
    Applei: 5
    Test
    i: 1
    

    이렇게 출력되나

    cmd를 통한 출력을 하게 되면

    i: 5
    Applei: 5
    i: 1t
    

    이렇게 출력됩니다.

    제가 생각했을 때는

    i: 5
    Applei: 5
    i: 1
    Test
    

    으로 되어야한다고 생각했는데

    1. cmd에선 왜 덮어씌어서 출력이 될까요?
    2. 그리고 이클립스와 cmd의 출력의 차이가 왜 있는 것일까요?

    3. 배열에 대한 메모리구조에 대해 질문있습니다. 소스를 보시면 input이라는 5byte짜리 배열을 선언했는데 제가 "AppleTest"라는 글자를 넣으면 '/r''/n' 까지 포함하여 11byte를 입력한건데 오버플로우가 안되고 왜 전부다 출력이 되는건지 궁금합니다. 설명을 보면 input스트림에

      "_ _ _ _ /n /r t e s T e l p p A "(_는 빈칸입니다.)
      

      입력이 되고, output스트림에는

      " i:5\nApllei:5Test\ri:1\n\n "
      

      로 입력이 된다는데 그럼 input[0] = "Apple", input[1] = "Test\r", input[2] ="\n" 이런식으로 들어간다는 말인가요??

    비오는데 감기조심하세요~~~