일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터베이스 DELETE
- 오라클
- 사무용 노트북
- 오라클 DELETE
- 코딩일기
- 데이터베이스 예제
- 탑마이장인
- 코딩입문
- 자바초보
- 코린이
- 데이터베이스 기초
- 데이터베이스 JOIN
- 개발자준비
- 슬림3
- 코딩초보자
- 데이터베이스
- IdeaPad 3 15ABA7
- SQL
- lenovo ideapad 3
- 티모장인
- 오라클UPDATE
- 데이터베이스 UPDATE
- 라이젠노트북
- 레노버 노트북
- 가성비 노트북
- 데이터베이스기초
- 레노버 아이디어패드 슬림3
- 레노버 슬림3
- 데이터베이스 집합연산자
- 자바입문
- Today
- Total
스퐁지송 개발노트
22.12.07(수) 입출력 스트림(Stream) 본문
입출력 스트림 (단방향)
큐-> FIFO (Fisrt IN First Out) 저장장치가 있을 때 들어오고 나가는 것을 저장하는 장치
먼저들어온것들이 먼저 나가는것
제일 많이 비유하는게 프링글스 통에 밑에 구멍난 경우!
스택-> FILO LIFO
프링글스 통에 넣어서 쌓게함 스택은 밑에 구멍이 안 뚫려있음. 그래서 먼저들어간게 나중에 나옴
단방향
반이중
전이중
스트림 처리방법
바이트 기반 처리 (1byte 단위로 처리(2진수 형태로 되어있음) ): 영상, 음악, 그림 ,사진
InputStream, OutputStream
InputStream: fileinputstream,
문자 기반 처리 : 문자열
~Reader, ~Writer
package 입출력스트림;
import java.io.IOException;
import java.io.InputStream;
public class Sample01 {
public static void main(String[] args) {
try {
InputStream in = System.in;
int data = 0;
while ((data = in.read()) != -1) { //read 자체가 1byte씩 읽어 오지만 정수형태로 읽어오게 되고
//데이터올 데이터가 없다 알려주는 -1를 리턴 data가 -1를 리턴받고 (!=-1)식이 false가 되므로 while문 탈출
System.out.print((char) data); // 그냥 출력해버리면 읽어오면 숫자로 나옴
}
} catch (IOException e) {
}
}
}
Sample01을 1번방식 불러오게하기 ↓
.read() 에 그냥 아무것도 없음 -1에 끝나게 됨.
package 입출력스트림;
import java.io.FileInputStream;
public class Sample02 {
public static void main(String[] args) {
try { //괄호안에 경로를 설정하면 경로에 있는 데이터를 가져와서 fis 변수에 저장됨
FileInputStream fis = new FileInputStream("src/입출력스트림/Sample01.java");
int data = 0; //종료시키게 하기 위한 변수 하나 선언
while((data=fis.read()) != -1) {
//데이터올 데이터가 없다 알려주는 -1를 리턴 data가 -1를 리턴받고 (!=-1)식이 false가 되므로 while문 탈출
System.out.print((char)data);
}
} catch(Exception e) {
}
}
}
Sample01을 2번방식 불러오게하기
.read(byte[])b: 배열 b의 크기만큼만 읽음 더 읽을 배열이 없으면 -1리턴 시키고 종료
바이트 형식에 맞춰서 불러오게끔 read를 함
배열 크기를 메서드로 설정함
package 입출력스트림;
import java.io.FileInputStream;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class Sample02 {
public static void main(String[] args) {
try { //괄호안에 경로를 설정하면 경로에 있는 데이터를 가져와서 fis 변수에 저장됨
FileInputStream fis = new FileInputStream("src/입출력스트림/Sample01.java");
int data = 0; //종료시키게 하기 위한 변수 하나 선언
byte[] buf = new byte[fis.available()];
while((data=fis.read(buf)) != -1) {
//데이터올 데이터가 없다 알려주는 -1를 리턴 data가 -1를 리턴받고 (!=-1)식이 false가 되므로 while문 탈출
System.out.print(new String(buf,0,data));
}
} catch(Exception e) {
}
}
}
한글이 안깨지는 결과값 도출
Sample01을 3번방식 불러오게하기 ↓
.read(bytep[]b, int off, int len) : 최대 len(길이)만큼 바이트를 읽음 배열 b[off]에서 부터 저장
.close() 처리할 거 다 처리하고 스트림 연결 끊어버리는 메서드
연결 끊어버리는 .close를 이용할때는 대부분 finally 사용!!
package 입출력스트림;
import java.io.FileInputStream;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class Sample02 {
public static void main(String[] args) {
FileInputStream fis =null;
try { //괄호안에 경로를 설정하면 경로에 있는 데이터를 가져와서 fis 변수에 저장됨
fis = new FileInputStream("src/입출력스트림/Sample01.java");
int data = 0; //종료시키게 하기 위한 변수 하나 선언
byte[] buf = new byte[fis.available()];
while((data=fis.read(buf,0,buf.length)) != -1) {
//데이터올 데이터가 없다 알려주는 -1를 리턴 data가 -1를 리턴받고 (!=-1)식이 false가 되므로 while문 탈출
System.out.print(new String(buf,0,data));
}
} catch(Exception e) {
} finally {
try {
fis.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
이 Java 코드는 ↑ FileInputStream을 사용하여 파일을 읽는 간단한 예입니다. FileInputStream은 파일에서 이진 데이터를 읽는 데 사용되며, 프로그램이 파일에서 읽는 것을 마칠 때 스트림이 제대로 닫히도록 하는 데 사용됩니다. 코드는 파일의 내용을 바이트 배열로 읽은 다음 배열을 문자열로 변환하여 콘솔에 인쇄합니다.
문자스트림
Reader로 가져옴
.read()
.read(char[] c)
.read(char[] c.int off, int len) : 문자배열,배열의방,배열의길이
2byte(한글이 2byte임) 씩 읽을 수 있음
한글을 신경쓰지않고 불러올 수 있다.
package 입출력스트림;
import java.io.FileReader;
public class Sample03 {
public static void main(String[] args) {
FileReader fr = null;
try {
fr = new FileReader("src/입출력스트림/Sample01.java");
int data = 0;
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
} catch (Exception e) {
//Exception e 란 예외발생된 이유를 변수 e에 저장
} finally {
try {
fr.close();
} catch (Exception e) {
}
}
}
}
버퍼스트림
BufferedReader
다른 스트림을 보조해준는 역할(원활하게,빠르게)
다른 스트림과 같이 사용해야함
package 입출력스트림;
import java.io.BufferedReader;
import java.io.FileReader;
public class Sample04 {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null; //보조 스트림 ,속도향상등
try {
fr = new FileReader("src./입출력스트림/Sample01.java");
br = new BufferedReader(fr);
//보조할 스트림을 넣음, 순서도 보조할 스트림 아래에 위치해야함
String txt = null; //버퍼스트림은 빠르게 줄단위로 읽어오기떄문
while( ( txt=br.readLine() ) !=null ) {
//버퍼스트림은 빠르게 줄단위로 읽어오기떄문 .readLine사용
System.out.println(txt);
}
} catch (Exception e) {
}finally {
try {
br.close(); //.close();는 try/catch문 안에 사용해야함
fr.close(); //.close();는 입력된 순서의 역순으로 끝내야함 (조립과 분해로 생각)
}catch (Exception e) {
}
}
}
}
바이트 출력 스트림-내보내기
OutputStream
???OutputStream
package 입출력스트림;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Sample05 {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("test.txt");
fos.write(97);
fos.write(98);
fos.write(99); //abc로 txt파일 출력 안의 내용을 바꿔도 새로운 txt파일이 생성되는게 아니라 기존의 내용을 덮어씌움
}catch (Exception e) {
}finally {
try {
fos.flush(); //스트림에 남은 내용을 다 내보냄
fos.close();
}catch (Exception e) {
}
}
}
}
워크스페이스폴더 선택후 새로고침(f5) 입력시 출력된 txt파일을 볼수 있음.
실행마다 출력값 누적시키기
true만 쓰면됨
try {
fos = new FileOutputStream("test.txt",true); //true를 입력시 아래 fos.write();값을 계속 바꿔서 실행시 마다 출력값이 누적되서 저장
fos.write(97);
fos.write(98);
fos.write(99); //abc로출력 출력시킬내용을 바꾸면 기존의 내용을 덮어씌움
}catch (Exception e) {
배열을 출력시키기
package 입출력스트림;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Sample05 {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("test.txt", true); // true를 입력시 아래 fos.write();값을 계속 바꿔서 실행시 마다 출력값이 누적되서 저장
byte[] b = new byte[26];
byte data = 65; //아스키 코드로 "A"
for (int i = 0; i < 26; i++) {
b[i] = data;
data++;
}
fos.write(b,0,5); //b배열의 0번방부터 5번방까지 출력 //ABCDE만 출력
} catch (Exception e) {
} finally {
try {
fos.flush(); // 스트림에 남은 내용을 다 내보냄
fos.close();
} catch (Exception e) {
}
}
}
}
보조스트림사용하기
BufferedReader (보조스트림)사용하는법
사용이유 -> 속도향상
ex) br= new BufferedReader(fr); -> 버퍼가 어떤 것을 보조할지(fr을 보조하려고 괄호 안에 fr을 넣음)
package 입출력스트림;
import java.io.BufferedReader;
import java.io.FileReader;
import java.nio.Buffer;
public class Sample04 {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("src/입출력스트림/Sample01.java");
br = new BufferedReader(fr); // 버퍼가 어떤 것을 보조할지(fr을 보조하려고 fr을 넣음)
String txt = null;
while ((txt = br.readLine()) != null) {
System.out.println(txt);
}
} catch (Exception e) {
}finally {
try {
br.close();
fr.close();
} catch (Exception e2) {
}
}
}
}
문자 출력 스트림
Writer
.writer(int i);
.writer(char[] c);
.writer(char[] b,int off, int len);
.writer(String str); //문자열도 출력가능
.writer(String str, int off, int len);
package 입출력스트림;
import java.io.FileWriter;
public class Sample06 {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("test2.txt");
fw.write('A'); // 문자 하나 입력서 작은 따움표 ''
char[] buf = { 'B', 'C', 'D' };
fw.write(buf); // buf 배열 출력
fw.write(buf, 1, 2); // buf배열의 1번방부터 2개출력
String str = "가나다라";
fw.write(str); //문자열 출력
fw.write(str, 2, 2); //문자열에 2번방부터 2개출력
} catch (Exception e) {
} finally {
try {
fw.flush();
fw.close();
} catch (Exception e) {
}
}
}
}
속도비교
package 속도비교;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Sample01 {
public static void main(String[] args) throws Exception {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
int data = 0;
long start = 0; //시작시간
long end = 0; //끝나는시간
fis= new FileInputStream("src/속도비교/cat.gif"); //cat.gif 를 java로 넣기
fos = new FileOutputStream("src/cat.gif"); //cat.gif 를 src로 내보내기
start = System.currentTimeMillis(); //시작시간
while((data=fis.read())!=-1) { //.read fis의 파일을 불러온다, data는 fis
fos.write(data); //fos로 data를 보내기
}
fos.flush();
end=System.currentTimeMillis();
fos.close();
fis.close();
System.out.println("버퍼 사용 X : "+ (end-start));
fis = new FileInputStream("src/속도비교/cat.gif");
bis = new BufferedInputStream(fis);
fos = new FileOutputStream("cat.gif");
bos = new BufferedOutputStream(fos);
start = System.currentTimeMillis();
while((data=bis.read())!=-1) {
bos.write(data);
}
bos.flush();
end = System.currentTimeMillis();
fos.close();
fis.close();
System.out.println("버퍼 사용 o : "+ (end-start));
}
}
버퍼 사용 X : 493
버퍼 사용 o : 4
'JAVA 입문 시작' 카테고리의 다른 글
22.12.08(목) 문제풀이 - 클래스 (0) | 2022.12.08 |
---|---|
22.12.08(목) 문제풀이 for, while, 배열 (0) | 2022.12.08 |
22.12.06(화) Thread간의 협업 wait,notify,notifyAll (0) | 2022.12.06 |
22.12.06(화) Thread (0) | 2022.12.06 |
22.12.05(월) 스트림 가공 (0) | 2022.12.05 |