ภาพรวม Java I/O Streams

การนำเข้าข้อมูลใน Java

Anthony Markham

VP Quant Developer

พื้นฐาน Stream

  • Stream คือท่อข้อมูลแบบทิศทางเดียวที่ทำงานตามลำดับ FIFO (First In, First Out)
  • Byte streams ทำงานกับข้อมูลไบนารีดิบ (InputStream/OutputStream)
  • Character streams จัดการข้อความพร้อมแปลง encoding อัตโนมัติ (Reader/Writer)

ภาพแสดง Streams

การนำเข้าข้อมูลใน Java

Byte Streams

  • ใช้กับข้อมูลไบนารี (รูปภาพ, เสียง ฯลฯ)
  • คลาสนามธรรมหลัก: InputStream (อ่าน), OutputStream (เขียน)
  • คลาสที่ใช้บ่อย: FileInputStream, FileOutputStream
  • เมธอดหลัก: read() คืนค่าไบต์, write() ส่งออกไบต์

ไฟล์ไบนารี: รูปภาพและเสียง

การนำเข้าข้อมูลใน Java

Byte Streams

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Process bytes in buffer
System.out.println("Read " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
การนำเข้าข้อมูลใน Java

Character Streams

  • ออกแบบมาเพื่อข้อมูลข้อความโดยเฉพาะ
  • คลาสนามธรรมหลัก: Reader (อ่านข้อความ), Writer (เขียนข้อความ)
  • คลาสที่ใช้บ่อย: FileReader, FileWriter, BufferedReader, BufferedWriter
  • เมธอดที่สะดวก: readLine() อ่านข้อความทีละบรรทัด

ไฟล์ CSV

การนำเข้าข้อมูลใน Java

Character Streams

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Process each line System.out.println(line); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
การนำเข้าข้อมูลใน Java

Buffered Streams - ประสิทธิภาพ

  • ช่วยเพิ่มประสิทธิภาพโดยลดการเข้าถึงดิสก์
  • อ่าน/เขียน byte streams ด้วย BufferedInputStream และ BufferedOutputStream
  • อ่าน/เขียน character streams ด้วย BufferedReader, BufferedWriter
    • อ่านทั้งบรรทัดด้วย readLine()
การนำเข้าข้อมูลใน Java

Buffered Streams - ประสิทธิภาพ

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Header processing
    String header = reader.readLine();
    System.out.println("Header: " + header);

// Efficient data reading String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Read " + count + " data rows"); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
การนำเข้าข้อมูลใน Java

การเชื่อมต่อ Stream

  • แต่ละ stream ในห่วงโซ่เพิ่มฟังก์ชันการทำงานเฉพาะ
  • รูปแบบที่ใช้บ่อย: FileInputStream -> InputStreamReader -> BufferedReader
  • ปิด stream ด้านนอกสุดเสมอ (stream ด้านในจะปิดอัตโนมัติ)
การนำเข้าข้อมูลใน Java

การเชื่อมต่อ Stream

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
การนำเข้าข้อมูลใน Java

การจัดการ Exception

  • สำคัญมากสำหรับการดำเนินการ I/O
  • Exception ที่พบบ่อย: IOException, FileNotFoundException
  • ใช้ try-with-resources เสมอเพื่อจัดการ exception
การนำเข้าข้อมูลใน Java

การจัดการ Exception

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Stream automatically closed here return lines;
}
การนำเข้าข้อมูลใน Java

มาฝึกกันเถอะ!

การนำเข้าข้อมูลใน Java

Preparing Video For Download...