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 | 2 |
numeric(integer) | ||
byte | 8 | 1 |
short | 16 | 2 |
integer | 32 | 4 |
long | 64 | 8 |
numeric(floating point) | ||
float | 32 | 4 |
double | 64 | 8 |
'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 |