다양한 관심 :)

JAVA-I/O(Byte) 본문

프로그래밍 공부/JAVA

JAVA-I/O(Byte)

뚜뚜:) 2020. 11. 3. 19:13

입출력(I/o)

- 자바 프로그램을 기반으로 데이터가 들어오고 나가는것

- 두 대상간의 데이터를 주고받는 것

 

 

스트림(stream) : 데이터를 운반하는데 사용되는 연결통로

- 입출력을 동시에 수행하려면 2개의 스트림이 필요( 입력용, 출력용)

 

 

1. byte 기반 스트림 : 데이터를 바이트 단위로 주고받는다.

       . InputStream, OutputStream (ex. FileInputStram, ByteArrayOutputStream)

       . read, write 가 메소드의 기본

 

        1) read : 읽어오기

         . (abstract) int read() : 읽어올 자료가 있으면 자료를 반환, 더이상 읽어올 자료가 없으면 -1 반환

         . int read(byte[ ] b): 배열의 데이터, 바이트 배열의 크기만큼 읽어온다. (주의해야함 : 반환값을 저장해야한다. ) 

         . int read(byte[ ] b, int off, int len) : 읽어온 데이터가 배열에서 반환값만큼 off번째부터 len만큼 읽어온다. 

        2) write : 작성

        .(abstract) void write(int b)

        . void write (byte[] b)

        . void write(byte[] b, int off, int len)

 

public static void main(String[] args) {
		byte[ ] inSrc = {0,1,2,3,4,5,6,7,8,9};
		byte[ ] outSrc = null;
		
		
		byte [ ] temp = new byte[4];	//4개짜리 배열 생성
		
		ByteArrayInputStream input = new ByteArrayInputStream(inSrc);
		ByteArrayOutputStream output = new ByteArrayOutputStream();
		
		//사용하기위해서는 try-catch , IOexception으로 사용
		
		try {
        
			//읽어올 데이터가 있는지 확인 
			while(input.available() > 0) {
            		
				input.read(temp);	   //바이트배열의 크기만큼 읽어온다.
				
			// temp 배열의 데이터를 출력 스트림으로 출력한다.
				output.write(temp);
             
             //배열로 바꿔주기
			outSrc = output.toByteArray();
			
			System.out.println();
			System.out.println(" inSrc ==> " + Arrays.toString(inSrc));
			System.out.println(" outSrc ==> " + Arrays.toString(outSrc));
			
		} catch (IOException e) {
			// TODO: handle exception
		}
더보기

   int read(byte[] b)를 사용하여 출력하였을 때 12개가 된 이유 : 배열로 읽어오면, 배열의 개수만큼 읽어온다. 
   temp 배열이 4개 , 마지막에 2개가 남았는데 남은 부분은 그전에 있는 값을 가져온다. 
   ==> 바이트 배열을 사용할 때에는 원본과 출력본이 같도록 주의해야한다. 
   ==> 해결방법 : 배열에 저장하고 그값을 그대로 출력한것

    (현재) - int read(byte[] b) 사용 - 반환값 : 실제 읽어온 갯수 
       -> int read(byte[]b, int off, int len) 으로 변경하기 
 
      *  len을 사용할 경우 len의 값을 저장할 변수 필요  

 

//int read(byte[]b, int off, int len) 으로 변경하기 
				
				//반환값을 저장해야한다
				//반환값 : 실제 읽어온 데이터의 byte수를 반환한다.
				int len = input.read(temp); 
				
				//읽어온 데이터가 저장된 temp배열에서 반환값만큼 0번째부터 읽어온 개수(반환값)만큼 출력한다.
				output.write(temp, 0, len);
				
				
				System.out.println("반복문 안에서 temp ==> " + Arrays.toString(temp));
			}
			

 

 

 

'프로그래밍 공부 > JAVA' 카테고리의 다른 글

Java - Stack, Queue  (0) 2020.11.12
JAVA- FILE COPY  (0) 2020.11.04
JAVA-I/O(입출력) 문자기반 스트림  (0) 2020.11.03
JAVA- Collection (LIST)  (0) 2020.11.03
JAVA- Collection ( Vector)  (0) 2020.11.03