I/O処理

java.ioパッケージ

1.ファイルシステム

2.ストリーム

バイトストリーム InputStream / OutputStream

文字ストリーム Writer / Reader

3.シリアライズ

java.nioパッケージ

1.Channel

2.Selector

3.Buffer

JavaのI/Oモデル

1.Blocking I/O

2.Blocking I/O + MultiThread(Thread Pool)

3.Non-blocking I/O + I/O multiplexing

4.Asynchronous I/O(Java 7)

Blocking I/O

read(socket, buffer);

process(buffer);

Non-blocking I/O

while(read(socket, buffer) != SUCCESS) {

...

}

process(buffer);

Asynchronous IO

class UserCompletionHandler {

void handle_event(buffer) {

process(buffer);

}

}

aioRead(socket, new UserCompletionHandler());

Blocking I/O

IO Multiplexing

class UserEventHandler {

void handle_event() {

if(can_read(socket)) {

read(socket, buffer);

process(buffer);

}

}

}

Reactor.register(new UserEventHandler(socket));

class Reactor {

void handle_events() {

while(1) {

sockets = select();

for(socket in sockets) {

get_event_handler(socket).handle_event();

}

}

}

}

Non-blocking I/O

I/O multiplexing

Asynchronous I/O