Java I/O流是Java编程中用于处理输入和输出的核心机制。通过I/O流,程序可以从外部源(如文件、网络连接、内存等)读取数据,或将数据写入外部目标。Java的I/O流分为字节流和字符流两大类,分别用于处理字节数据和字符数据。
字节流主要用于处理二进制数据,如图片、音频、视频等。Java提供了InputStream
和OutputStream
两个抽象类来表示字节流。
InputStream
InputStream
是所有字节输入流的基类。常用的子类有FileInputStream
、ByteArrayInputStream
等。
import java.io.FileInputStream; import java.io.IOException; public class InputStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("input.txt")) { int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } }
OutputStream
OutputStream
是所有字节输出流的基类。常用的子类有FileOutputStream
、ByteArrayOutputStream
等。
import java.io.FileOutputStream; import java.io.IOException; public class OutputStreamExample { public static void main(String[] args) { try (FileOutputStream fos = new FileOutputStream("output.txt")) { String text = "Hello, World!"; fos.write(text.getBytes()); } catch (IOException e) { e.printStackTrace(); } } }
字符流主要用于处理文本数据。Java提供了Reader
和Writer
两个抽象类来表示字符流。
Reader
Reader
是所有字符输入流的基类。常用的子类有FileReader
、BufferedReader
等。
import java.io.FileReader; import java.io.IOException; public class ReaderExample { public static void main(String[] args) { try (FileReader fr = new FileReader("input.txt")) { int data; while ((data = fr.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } }
Writer
Writer
是所有字符输出流的基类。常用的子类有FileWriter
、BufferedWriter
等。
import java.io.FileWriter; import java.io.IOException; public class WriterExample { public static void main(String[] args) { try (FileWriter fw = new FileWriter("output.txt")) { String text = "Hello, World!"; fw.write(text); } catch (IOException e) { e.printStackTrace(); } } }
为了提高I/O操作的效率,Java提供了缓冲流。缓冲流通过在内存中缓存数据,减少了对底层I/O设备的直接访问次数。
BufferedInputStream
和 BufferedOutputStream
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class BufferedStreamExample { public static void main(String[] args) { try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) { int data; while ((data = bis.read()) != -1) { bos.write(data); } } catch (IOException e) { e.printStackTrace(); } } }
BufferedReader
和 BufferedWriter
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class BufferedRWExample { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("input.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) { String line; while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); } } catch (IOException e) { e.printStackTrace(); } } }
对象流用于序列化和反序列化对象。Java提供了ObjectInputStream
和ObjectOutputStream
两个类来处理对象流。
ObjectOutputStream
import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class ObjectOutputStreamExample { public static void main(String[] args) { try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) { MyClass obj = new MyClass("John", 30); oos.writeObject(obj); } catch (IOException e) { e.printStackTrace(); } } } class MyClass implements java.io.Serializable { private String name; private int age; public MyClass(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "MyClass{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
ObjectInputStream
import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class ObjectInputStreamExample { public static void main(String[] args) { try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) { MyClass obj = (MyClass) ois.readObject(); System.out.println(obj); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
Java的I/O流提供了丰富的类和方法来处理各种类型的输入和输出操作。通过字节流和字符流,可以处理二进制数据和文本数据。缓冲流可以提高I/O操作的效率,而对象流则用于序列化和反序列化对象。掌握这些I/O流的使用方法,可以帮助开发者更高效地处理数据输入输出任务。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。