[JAVA] ByteStream : DataInputStream / DataOutputStream
ByteStream : DataInputStream / DataOutputStream
DataInputStream과 DataOutputStream은 자바의 기본 자료형 데이터를 바이트 스트림으로 입출력하는 기능을 제공하는 ByteStream 클래스이다.
DataInputStream과 DataOutputStream 은 FilterInputStream과 FilterOutputStream을 상속하고 있어, 객체 생성시에 InputStream과 OutputStream을 매개변수 인자로 가진다.
[JAVA] ByteStream : FilterInputStream / FilterOutputStream
이 클래스와 입출력 장치를 대상으로 하는 입출력 클래스를 같이 이용하면 자바의 기본 자료형 데이터를 파일 등 입출력 장치로 직접 입출력할 수 있다.
FileInputStream / FileOutputStream 과의 차이점은 자바 기본 자료형 데이터를 입/출력 할 수 있다는 것이다.
FileInputStream / FileOutputStream 은 byte[] 단위의 데이터만 입/출력을 할 수 있었다.
하지만 DataStream Filter를 적용함으로써, 자바 기본 자료형(char, int, long, ...) 으로 데이터를 입력하고 출력할 수 있다.
위의 그림과 같이 DataInputStream / DataOutputStream은 데이터 입출력시 기본 자료형을 ByteStream으로 변환하여 파일 입/출력을 수행한다.
* DataInputStream / DataOutputStream 의 생성자
DataInputStream / DataOutputStream 의 생성자 | 설명 |
DataInputStream(InputStream in) | - inputStream을 인자로 DataInputStream을 생성한다. |
DataOutputStream(OutputStream out) | - outputStream을 인자로 DataOutputStream을 생성한다. |
* DataInputStream 의 메소드
DataInputStream의 메소드 | 설명 |
boolean readBoolean() throws IOException | - Stream으로부터 읽은 boolean을 반환한다. |
byte readByte() throws IOException | - Stream으로부터 읽은 byte를 반환한다. |
char readChar() throws IOException | - Stream으로부터 읽은 char를 반환한다. |
double readDouble throws IOException | - Stream으로부터 double을 반환한다. |
float readFloat() throws IOException | - Stream으로부터 float을 반환한다. |
long readLong() throws IOException | - Stream으로부터 long을 반환한다. |
short readShort() throws IOException | - Stream으로부터short를 반환한다. |
int readInt() throws IOException | - Stream으로부터 int를 반환한다. |
void readFully(byte[] buf) throws IOException | - Stream으로부터 buf 크기만큼의 바이트를 읽어 buf[]에 저장한다 |
void readFully(byte[] buf, int off, int len) throws IOException | - Stream으로부터 len 길이만큼 바이트를 읽어 buf의 off 위치에 저장한다. |
String readUTF() throws IOException | - UTF 인코딩 값을 얻어 문자열로 반환한다. |
static String readUTF(DataInput in) throws IOException | - DataInput의 수정된 UTF 인코딩 값을 얻어 문자열로 반환한다. |
int skipBytes(int n) throws IOException | - n 만큼 바이트를 skip 한다. |
* DataOutputStream의 메소드
DataOutputStream의 메소드 | 설명 |
void flush() throws IOException | - 버퍼를 출력하고 비운다. |
int size() | - Stream에 출력된 바이트 크기를 반환한다. |
void write(int i) throws IOException | - int 형 i 값이 갖는 1바이트를 출력한다. |
void write(byte buf[], int index, int size) throws IIOException | - byte 배열 buf의 index 위치에서 size만큼 출력한다. |
void writeBoolean(boolean b) throws IOException | - boolena을 1바이트 값으로 출력한다. |
void writeByte(int i) throws IOException | - int를 4바이트 값으로 상위 바이트 먼저 출력한다. |
void writeBytes(String s) throws IOException | - 문자열을 바이트 순으로 출력한다. |
void writeChar(int i) throws IOException | - char를 2바이트 값으로 상위 바이트 먼저 출력한다. |
void writeChars(String s) throws IOException | - String 문자열을 char형으로 출력한다. |
void writeDouble(double d) throws IOException | - Double 클래스의 doubleToBits()를 사용하여 long으로 변환한 다음 long 값을 8바이트수량으로 상위바이트 먼저 출력한다. |
void writeFloat(float f) throws IOException | - Float을 floatToBits()를 사용하여 변환한 다음 int 값을 4바이트 수량으로 상위 바이트 먼저 출력한다. |
void writeInt(int i) throws IOException | - int의 상위 바이트 먼저 출력한다. |
void writeLong(long l) throws IOException | - long 형의 인자값 출력한다. |
void writeShort(shrot s) throws IOException | - short형의 인자값 출력한다. |
void writeUTF(String s) throws IOException | - UTF-8 인코딩을 사용해서 문자열을 출력한다. |
* DataInputStream / DataOutputStream 사용 예제
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataStreamTest { public static void main(String[] args) { FileInputStream fis = null; DataInputStream dis = null; FileOutputStream fos = null; DataOutputStream dos = null; try{ // "StreamFile.out" 파일을 출력하는 객체를 생성한다. // DataOutputStream Filter를 적용한다. fos = new FileOutputStream("StreamFile.out"); dos = new DataOutputStream(fos); // "StreamFile.out" 파일에 각 기본형 데이터를 출력한다. dos.writeBoolean(false); dos.writeByte(Byte.MAX_VALUE); dos.writeChar('굿'); dos.writeDouble(Double.MAX_VALUE); dos.writeFloat(Float.MIN_VALUE); dos.writeLong(Long.MAX_VALUE); dos.writeShort(Short.MAX_VALUE); dos.writeUTF("안녕하세요"); // "StreamFile.out" 파일을 읽는 객체를 생성한다. // DataInputStream Filter를 적용한다. fis = new FileInputStream("StreamFile.out"); dis = new DataInputStream(fis); // "StreamFile.out" 파일에서 각 기본형 데이터를 읽어온다. System.out.println(dis.readBoolean()); System.out.println(dis.readByte()); System.out.println(dis.readChar()); System.out.println(dis.readDouble()); System.out.println(dis.readFloat()); System.out.println(dis.readLong()); System.out.println(dis.readShort()); System.out.println(dis.readUTF()); }catch(Exception e){ e.printStackTrace(); }finally{ if(dis != null) try{dis.close();}catch(IOException e){} if(fis != null) try{fis.close();}catch(IOException e){} if(dos != null) try{dos.close();}catch(IOException e){} if(fos != null) try{fos.close();}catch(IOException e){} } } } |
- FileOutputStream 으로 "StreamFile.out" 파일에 스트림 객체를 생성하고 DataOutputStream을 Filter로 적용하여, 자바 기본형 타입들로 파일에 데이터를 출력한다.
- FileInputStream 으로 "StreamFile.out" 파일에 스트림 객체를 생성하고 DataInputStream을 Filter로 적용하여, 자바 기본형 타입들로 파일의 데이터를 가져온다.
JAVA API DOC : DataInputStream
JAVA API DOC : DataOutputStream
출처: https://hyeonstorage.tistory.com/239?category=578560 [개발이 하고 싶어요]
'JAVA > Java IO' 카테고리의 다른 글
[JAVA] 문자 Stream : BufferedReader / BufferedWriter (파일 복사 예제) (0) | 2019.08.07 |
---|---|
[JAVA] 문자 Stream : FileReader / FileWriter (0) | 2019.08.07 |
[JAVA] 문자 Stream : InputStreamReader / OutputStreamWriter (0) | 2019.08.07 |
[JAVA] 문자 Stream : Reader / Writer (0) | 2019.08.07 |
[JAVA] ByteStream : BufferedInputStream / BufferedOutputStream (파일 복사 예제) (0) | 2019.08.07 |
[JAVA] ByteStream : FilterInputStream / FilterOutputStream (0) | 2019.08.07 |
[JAVA] ByteStream : FileInputStream / FileOutputStream (0) | 2019.08.06 |
[JAVA] System 클래스(표준 입출력) : System.in, System.out, System.err (0) | 2019.08.06 |