ByteStream에 대한 정의 및 메소드, 생성자
**Stream ( 데이터를 주고 받기 위한 통로 )
외부 HW나 파일 또는 네트워크와 데이터를 주고받을 수 있는 통로
[일반적으로 스트림을 쓰는 경우 ]
스트림
Program <======================> File, Network (Soket), H/W ( keyboard, Monitor)
keyboard와 연결된 스트림은 System.int
Monitor와 연결된 스트림은 System.out
[ 방향에 따른 분류 ]
1) Input Stream
2) Output Stream
[ 데이터에 따른 분류 ]
1) Byte Stream : 일반적인 스트림
2) Character Stream : 문자 단위로 해석
문자에는 Encoding이 있다
/** 공부한 내용 정리 가 필요함 **/
AComputer <-----------------> BComputer
통신을 하고 싶다 .
OS == OS 운영체제마다 Default가 있다. // 운영체제가 다르면 안된다
언어 ==언어 프로그래밍 언어어도 같아야한다 .
운영체제와 언어가 다르면 Character를 안쓰고 ByteStream을써야한다.
[처리과정]
//try안에 작성을 한다.
try{
1) 스트림 생성
2) 읽고 쓰기
}
//반드시 닫아하기 때문에 finally에 저장
finally {
3) 스트림 닫기 ( 항상 닫아야합니다 )
}
프로그램이 종료되지 않는다면, 상관이 없는데
종료가 안되면 문제가 생긴다.
java.io의 close()를 해주지 않으면 어떤 문제가 생길까요 ?
/** 공부한 내용 정리 가 필요함 **/
[문자열과 Byte전환]
1)문자열 - > byte[]
getBytes() : 기본인코딩 기본인코딩
getBytes("인코딩방식") : 인코딩방식으로
2)byte [] -> 문자열
new String(byte 배열);
new String(Byte 배열, "인코딩방식")
[Stream Class ]
Stream 클래스는 크게 4가지로 나눈다
** OutPutStream - ByteStream들 중에서 출력에 관련되 메소드 이름을 소유한 추상클래스
void close () : 스트림 닫기
void flush() : 현재 버퍼에 남아있는 내용 모두 출력
void write(int r) : r을 기록
void write(byte[] b ) : b의 모든 내용을 기록
void write(byte [] b , int offset, int length) : b 배열에서 offset 부터 length만큼 기록
생성자에 true를 넣어주면, 덮어쓰기가 아닌 이어서 쓴다.
fos = new FileOutputStream("sample.txt",true);
반대로 생성자에 true를 쓰지 않으면 덮어쓰기 형식으로 작성됩니다.
fos = new FileOutputStream("sample.txt");
** InPutStream - ByteStream들의 입력에 관련된 메소드 이름을 소유한 추상 클래스
int available() : 스트림에서 읽을 수 있는 크기를 바이트 단위로 리턴
int read() : 하나의 바이트를 읽어서 정수로 리턴 못 읽으면 음수를 리턴
int read(byte[] b ) : b배열의 크기만큼을 읽어서 b에 저장하고 읽은 바이트 수를 리턴 데이터를 못 읽으면 0보다 작거나 같은 수를 리턴
int read(byte [] b , int offset, int length) : b배열에 offset 부터 length만큼을 읽어서 저장하고 읽은 개수를 리턴 데이터를 못 읽으면 0보다 작거나 같은 수를 리턴
** File OutPutStream - 파일에 byte 단위로 기록하기 위한 스트림
[생성자]
FileNotFoundException을 처리해야 합니다.
FileOutputStream(File file) : 매개변수로 파일의 경로를 문자열로 주지않고 File 객체로 생성해서 대입합니다.
FileOutputStream(File file, boolean append) :
FileOutputStream(String name) : 파일 경로에 파일이 없으면 생성하고 파일이 존재하면 기존 파일의 시작부분부터 기록합니다.
FileOutputStream(String name, boolean append) 파일경로와 쓰기모드를 설정하는데 두번째 매개변수가 true 이면 파일이 있는 경우에 뒤에서 이어서 기록합니다.
**File IntputStream -
[생성자]
FileIntputStream(File file) : File 객체를 대입
FileInputStream(String file) : 파일의 경로를 문자열로 대입
[sample.txt 파일 불러 오기 ]
[[text] 파일 한글을 입력한경우 or 한꺼번에 읽기 ]
위의 방법으로는 출력을 할 수가 없다.
[코드]
그러나 위의 방식의 출력은 문제가 있습니다.
단점 : 파일의 크기가 크다면 읽는데 시간이 많이 걸립니다.
[단점 보완 ]
이를 해결하기 위해서는 아래방식을 이용하면됩니다.
[코드]
단 위 방법을 사용할 때 나눠서 출력한다면 홀수로 배열을 주어서는 안됩니다
잘못하면 오류가 날 수 있습니다.
궁금하신 것은 직접출력해보시면 될 것 같습니다.
Tip
[배열의 크기는 짝수인 패킷의 수로 정해주는 것이 좋습니다.]
64 128 512 1024
'Java > 자바 공부' 카테고리의 다른 글
1-4) ChractorStream의 Writed와 Read (0) | 2018.01.17 |
---|---|
split이용한 배열의 마지막 값을 가져오는 방법 (0) | 2018.01.17 |
1-3) ByteStream의 파일복사 방법 (0) | 2018.01.17 |
1-2)ByteStream의 BufferdOutputStream, BufferdInputStream (0) | 2018.01.17 |
JTable (0) | 2018.01.16 |