您好,登录后才能下订单哦!
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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。