1. Java I/O Dasar
Konsep yang Dipelajari:
- InputStream/OutputStream
- Reader/Writer
- File handling
- Serialization
Latihan:
- File Copy
// Salin file menggunakan FileInputStream dan FileOutputStream
try (InputStream in = new FileInputStream("input.txt");
OutputStream out = new FileOutputStream("output.txt")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
2. Baca/Tulis File Teks
// Gunakan BufferedReader dan BufferedWriter untuk memproses file teks
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line.toUpperCase());
writer.newLine();
}
}
3. Serialisasi Objek
// Simpan dan muat objek ke/dari file
class Person implements Serializable {
private String name;
// constructor, getter, setter
}
// Serialize
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"))) {
oos.writeObject(new Person("Alice"));
}
// Deserialize
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {
Person p = (Person) ois.readObject();
}
2. Java NIO (New I/O)
Konsep yang Dipelajari:
- Path dan Files
- Channel dan Buffer
- Non-blocking I/O
Latihan:
- Baca File dengan NIO
Path path = Paths.get("data.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
2. Salin File Menggunakan Channel
try (FileChannel src = FileChannel.open(Paths.get("src.txt"), StandardOpenOption.READ);
FileChannel dest = FileChannel.open(Paths.get("dest.txt"), StandardOpenOption.WRITE, StandardOpenOption.CREATE)) {
src.transferTo(0, src.size(), dest);
}
3. Java Networking Dasar
Konsep yang Dipelajari:
- URL dan URLConnection
- TCP Socket (ServerSocket dan Socket)
- UDP Datagram
Latihan:
- HTTP Client Sederhana
URL url = new URL("https://api.example.com/data");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
2. TCP Echo Server/Client
// Server
try (ServerSocket server = new ServerSocket(12345);
Socket client = server.accept();
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()))) {
String input;
while ((input = in.readLine()) != null) {
out.println("Echo: " + input);
}
}
// Client
try (Socket socket = new Socket("localhost", 12345);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println(in.readLine());
}
}
3. UDP Chat Sederhana
// Pengirim
DatagramSocket socket = new DatagramSocket();
byte[] buffer = "Hello UDP".getBytes();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 9876);
socket.send(packet);
// Penerima
DatagramSocket socket = new DatagramSocket(9876);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
4. Proyek Integrasi
Aplikasi Chat dengan File Sharing
- Fitur:
- Client-server architecture menggunakan TCP
- Bisa mengirim pesan teks
- Bisa mengirim file (gunakan Java I/O untuk transfer file)
- Log aktivitas disimpan ke file (gunakan BufferedWriter)
- Bonus: Enkripsi data menggunakan SSL/TLS
Struktur Kode Contoh:
// Server
public class ChatServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
ExecutorService pool = Executors.newCachedThreadPool();
while (true) {
Socket clientSocket = serverSocket.accept();
pool.execute(new ClientHandler(clientSocket));
}
}
}
// ClientHandler
class ClientHandler implements Runnable {
private Socket socket;
// Implementasi handling pesan dan file
}
5. Tips Belajar
- Selalu tambahkan exception handling (
try-with-resources
) - Gunakan
Logger
untuk mencatat error - Eksperimen dengan Wireshark untuk analisis traffic jaringan
- Bandingkan performa I/O tradisional vs NIO
6. Tantangan Lanjutan
- Buat proxy server HTTP sederhana
- Implementasikan REST client menggunakan
java.net.http.HttpClient
(Java 11+) - Buat aplikasi P2P file sharing dengan UDP multicast
Contoh HttpClient (Java 11+):
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
Dengan menyelesaikan latihan-latihan ini, Anda akan memahami konsep inti Java I/O dan Networking serta mampu membangun aplikasi berbasis jaringan sederhana.