본문 바로가기

Programming Practice/Java

DataInputStream/DataOutputStream

1. FillterStream

: data 변환 - 암축, 암호화, 다른 format으로 변환

: DataInputStream/DataOutputStream 은 FilterStream 으로 다른 format으로 변환한다.

 DataInputStream

 inputstream → byte[] → Java primitive data type

 inputstream → 기존 byte[] 를 자르기

 DataOutputStream

 Java primitive data type  byte[] → outputstream 

 기존 byte[] 를 자르기 → outputstream 


2. DataInputStream

1) 생성자

 DataInputStream(InputStream in)

Java primitive data type 을 read 해서 byte[]로 바꾸거나, 기존 byte[]를 자른 byte[]를 inputStream in 에 write한다.

2) 주요 메서드

 ㄱ. Java primitive data type → byte[] → inputstream

readBoolean, readChar, readDouble, readFloat, readLong, readShort, readInt

 ㄴ. inputstream → 기존 byte[] 를 자르기 

readFully(byte[] b) : inputstream에서 byte[] b 길이만큼 읽어서 b에 쓰기

readFully(byte[] b, int off, int len) : inputstream 에서 len만큼 읽어서 byte[] b의 byte[] b의 off 위치에서 len 길이만큼 쓰기

 

3. DataOutputStream

1) 생성자

 DataOutputStream(OutputStream out)

2) 주요 메서드

ㄱ. Java primitive data type  byte[] → outputstream

writeBoolean, writeChar, writeDouble, writeFloat, writeLong, writeShort, writeInt

ㄴ. 기존 byte[] 를 자르기 → outputstream

write(byte[] b) : b 전체를 outputstream에 쓰기

write(byte[] b, int off, int len) : b 의 off 위치에서 len 만큼 잘라서 outputstream에 쓰기


4. 사용

1) primitive data type 을 byte[] 로 변환해서 전송하거나, 수신한 byte[]를 primitive data type으로 변환해서 사용하는 java socket 통신에서 사용

2) String 은 primitive data type이 아니기 때문에 기본적으로 제공해주는 method를 이용하지 못한다. String 은 다른 primitive data type 과 달리 byte 길이가 정해져있지 않기 때문에 변환한 byte[]를 전송하기 전, byte[] 길이를 먼저 전송한다. 또한 수신시에도 byte[] 길이를 먼저 받아서 byte[] 을 먼저 선언해놓는다.


cf. Java primitive data type

 type

bit depth 

byte depth 

 boolean & char

 boolean

JVM-specific 

JVM-specific 

 char

16 

 numeric(integer)

 byte

8  

 short

16 

 integer  

32 

 long 

64 

 numeric(floating point)

 float

32 

 double

64 


'Programming Practice > Java' 카테고리의 다른 글

Socket File transfer  (0) 2016.01.26
memory  (0) 2016.01.01
여러 class의 각각의 method를 각각의 간격을 두고 실행하기  (0) 2015.03.29
DateUtil  (0) 2015.03.29
class 의 path 로 class 객체 만들기  (0) 2015.03.29