网站建设设置背景图片,win10部署wordpress,凡科主要是做什么的,第四章第二节网站建设的教学设计缓冲流 缓冲流#xff08;Buffered Stream#xff09;也被称为高效流#xff0c;它是对基本的字节字符流进行增强的一种流。通过缓冲流#xff0c;可以提高数据的读写能力。 在创建缓冲流对象时#xff0c;会创建一个内置的默认大小的缓冲区数组。通过对缓冲区的读写…
缓冲流 缓冲流Buffered Stream也被称为高效流它是对基本的字节字符流进行增强的一种流。通过缓冲流可以提高数据的读写能力。 在创建缓冲流对象时会创建一个内置的默认大小的缓冲区数组。通过对缓冲区的读写可以减少系统的IO次数从而提高读写的效率。 Java中提供了多种缓冲流类包括BufferedReader、BufferedWriter、BufferedInputStream和BufferedOutputStream。这些类分别对应于不同类型的I/O操作
BufferedReader 和 BufferedWriter 是字符缓冲流分别用于字符输入和输出。BufferedInputStream 和 BufferedOutputStream 是字节缓冲流分别用于字节输入和输出。
字节缓冲流 实例
通过字节缓存流来提高读写效率 import java.io.*;public class IOLearn3 {public static void main(String[] args) throws Exception {//创建一个FileInputStream对象InputStream fileInputStream new FileInputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt);//缓冲输入流包装原始的字节输入流BufferedInputStream bufferedInputStreamnew BufferedInputStream(fileInputStream);//创建文件输出流对象OutputStream fileOutputStream new FileOutputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt);//缓冲输出流包装原始的字节输出流BufferedOutputStream bufferedOutputStreamnew BufferedOutputStream(fileOutputStream);//读取a.txt文件中的数据写入到b.txt中int data;while ((databufferedInputStream.read())!-1){bufferedOutputStream.write(data);}//关闭流bufferedOutputStream.close();bufferedInputStream.close();fileOutputStream.close();fileInputStream.close();}
}
字符缓冲流
实例
通过字符缓冲流提高读写效率
import java.io.*;public class IOLearn6 {public static void main(String[] args) throws Exception {//创建字符输入管道FileReader fileReadernew FileReader(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt);//字符缓冲流包装原始字符流BufferedReader bufferedReadernew BufferedReader(fileReader);//创建字符输出管道FileWriter fileWriternew FileWriter(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt);//字符缓冲输出流包装原始字符输出流、BufferedWriter bufferedWriternew BufferedWriter(fileWriter);int data;while((databufferedReader.read())!-1){bufferedWriter.write(data);}//关闭流bufferedWriter.close();bufferedReader.close();fileWriter.close();fileReader.close();}
}
关闭流的两种方式
改写字符缓冲流的实例
1.try-catch-finally
import java.io.*;public class IOLearn6 {public static void main(String[] args) throws IOException {FileReader fileReadernull;BufferedReader bufferedReadernull;FileWriter fileWriternull;BufferedWriter bufferedWriternull;try{//创建字符输入管道fileReadernew FileReader(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt);//字符缓冲流包装原始字符流bufferedReadernew BufferedReader(fileReader);//创建字符输出管道fileWriternew FileWriter(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt);//字符缓冲输出流包装原始字符输出流、bufferedWriternew BufferedWriter(fileWriter);int data;while((databufferedReader.read())!-1){bufferedWriter.write(data);}}catch (IOException e){e.printStackTrace();}finally {//关闭流bufferedWriter.close();bufferedReader.close();fileWriter.close();fileReader.close();}}
}
2.try-with-resource import java.io.*;public class IOLearn6 {public static void main(String[] args) throws Exception {try( //创建一个FileInputStream对象InputStream fileInputStream new FileInputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt);//缓冲输入流包装原始的字节输入流BufferedInputStream bufferedInputStreamnew BufferedInputStream(fileInputStream);//创建文件输出流对象OutputStream fileOutputStream new FileOutputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt);//缓冲输出流包装原始的字节输出流BufferedOutputStream bufferedOutputStreamnew BufferedOutputStream(fileOutputStream);){//读取a.txt文件中的数据写入到b.txt中int data;while ((databufferedInputStream.read())!-1){bufferedOutputStream.write(data);}}catch (IOException e){e.printStackTrace();}}
}
字符转换流解决不同编码情况下读取字符乱码问题
解决步骤获取原始字节输入流通过指定的字符集转换成字符输入流 字符转换流Character Conversion Streams在Java的I/O库中指的是那些能够在字节流和字符流之间进行转换的流。字符流如Reader和Writer处理的是char类型的数据而字节流如InputStream和OutputStream处理的是byte类型的数据。当你要在字节流和字符流之间进行转换时就需要使用字符转换流。 Java提供了几个类来实现这种转换其中最常用的是InputStreamReader和OutputStreamWriter。这些类允许你把字节流转换为字符流或者把字符流转换为字节流。
实例一
将a.txt以GBK字符集读取 import java.io.*;public class IOLearn7 {public static void main(String[] args) throws Exception {try( //创建一个FileInputStream对象InputStream fileInputStream new FileInputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt);//将字节输入流转换成指定字符集的字符输入流InputStreamReader inputStreamReadernew InputStreamReader(fileInputStream,GBK);){//读取a.txt文件中的数据int data;while ((datainputStreamReader.read())!-1){System.out.print((char)data);}}catch (IOException e){e.printStackTrace();}}
}结果 实例二
将a.txt(GBK编码)中的数据写入到b.txt(UTF-8编码)
import java.io.*;public class IOLearn7 {public static void main(String[] args) throws Exception {try( //创建一个FileInputStream对象InputStream fileInputStream new FileInputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt);//将字节输入流转换成指定字符集的字符输入流InputStreamReader inputStreamReadernew InputStreamReader(fileInputStream,GBK);//创建字节输出流OutputStream outputStreamnew FileOutputStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt);//将字节输出流转换成指定字符集的字符输出流OutputStreamWriter outputStreamWriternew OutputStreamWriter(outputStream, UTF-8);){//读取a.txt文件中的数据int data;while ((datainputStreamReader.read())!-1){//它会将字符编码为字节并将这些字节存储在缓冲区中。outputStreamWriter.write(data);}}catch (IOException e){e.printStackTrace();}}
}
打印流 打印流Print Stream**在Java中特指PrintStream和PrintWriter这两个类它们主要用于方便地打印各种数据值的表现形式到指定的输出目标如控制台、文件等。 PrintStream这是字节打印流继承自OutputStream主要用于写字节数据。它提供了print和println方法可以打印数据并自动进行换行。创建PrintStream对象时可以指定目标输出例如文件或OutputStream。PrintWriter这是字符打印流继承自Writer主要用于写字符数据。与PrintStream类似它也提供了print和println方法。当启用自动刷新时调用println、printf或format方法会立即刷新输出 实例一
import java.io.IOException;
import java.io.PrintStream;public class IOlearn8 {public static void main(String[] args) {try (PrintStream printStream new PrintStream(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\src\\print.txt);){ System.setOut(printStream);//指定打印流对象System.out.println(test printStream);//打印到文件中}catch (IOException e){e.printStackTrace();}}
}
结果 实例二
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;public class IOlearn8 {public static void main(String[] args) {try (PrintWriter printWriter new PrintWriter(C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\src\\print.txt);){printWriter.println(test1);printWriter.println(test2);printWriter.println(test3);}catch (IOException e){e.printStackTrace();}}
}
序列化流 序列化流在Java中指的是将对象的状态转换为可以存储或传输的形式的过程以及随后将这个形式的数据恢复为对象的过程。这个过程涉及到两个核心的概念序列化和反序列化。 **序列化Serialization**是将对象的状态转换为字节流的过程这样可以将对象的状态保存到磁盘、数据库或通过网络发送到另一台机器。序列化流就是用于执行这个转换过程的输出流。 **反序列化Deserialization**则是将之前序列化保存的字节流恢复为对象的过程。反序列化流是用于执行这个恢复过程的输入流。 在Java中要实现对象的序列化需要让类实现Serializable接口。这个接口是一个标记接口没有任何方法需要实现它仅仅是一个标识符告诉Java运行时系统这个类的对象可以被序列化。 Java提供了ObjectOutputStream类来执行序列化操作它可以将对象序列化到输出流中。同时ObjectInputStream类用于执行反序列化操作它可以从输入流中读取序列化数据并创建对象。 下面是一个简单的例子展示了如何使用ObjectOutputStream和ObjectInputStream进行序列化和反序列化
import java.io.*; // 假设有一个类Person实现了Serializable接口
class Person implements Serializable { private String name; private int age; // 构造方法、getter和setter方法 // ...
} public class SerializationExample { public static void main(String[] args) { try { // 序列化对象到文件 Person person new Person(Alice, 30); FileOutputStream fos new FileOutputStream(person.ser); ObjectOutputStream oos new ObjectOutputStream(fos); oos.writeObject(person); oos.close(); // 从文件中反序列化对象 FileInputStream fis new FileInputStream(person.ser); ObjectInputStream ois new ObjectInputStream(fis); Person deserializedPerson (Person) ois.readObject(); ois.close(); // 输出反序列化后的对象信息 System.out.println(Deserialized Person:); System.out.println(Name: deserializedPerson.getName()); System.out.println(Age: deserializedPerson.getAge()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }
} 在这个例子中Person类实现了Serializable接口因此可以被序列化。ObjectOutputStream用于将Person对象序列化到文件person.ser中而ObjectInputStream则用于从该文件中反序列化对象。注意序列化时可能会 抛出IOException反序列化时可能会抛出IOException和ClassNotFoundException因此需要进行适当的异常处理。
IO流体系