일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바기초
- 입출력
- 예제
- 자바
- 설치방법
- 서블릿 동작방식
- 서블릿 파라미터
- 숫자야구
- File
- 서블릿
- java
- 자바문제
- DA#
- 오라클
- 스트림
- 테이블 설계
- SQL
- 조건문
- 자바I/O
- 자바공부
- 자바 암호화
- 컨텍스트 초기화 객체
- 스택
- 객체
- Servlet
- 자바객체
- 서블릿 값 가져오기
- OOP
- 서블릿 예제
- 자바설치
- Today
- Total
다양한 관심 :)
JAVA-I/O(Byte) 본문
입출력(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 |