
输入输出流(二)
发布日期:2021-05-10 03:44:18
浏览次数:18
分类:精选文章
本文共 3246 字,大约阅读时间需要 10 分钟。
Java I/O流详解:从基础到实践
Java 的输入输出流是数据操作的基础,掌握它们是每个开发者不可或缺的技能。本文将从基础的字节流到高级的字符流,逐步探讨Java中的流操作。用户提供的代码和相关总结经过重组与优化,方便阅读和理解。
字符流
字符流(Character Stream)在Java中用于处理文本数据。它比字节流更适合处理特定的字符编码,特别是多语言环境下的文件读写。
字符输入流:FileReader
FileReader 是最基础的字符输入流,通常用于读取文本文件。
常用方法:
read()
:逐字符读取。read(char[] c)
:一次性读取多个字符。read(char[] c, int off, int len)
:读取指定长度的字符。close()
:释放资源。
示例代码:
FileReader fr = new FileReader("a.txt");StringBuffer sb = new StringBuffer();while ((tmp = fr.read()) != -1) { sb.append((char) tmp);}System.out.println(sb.toString());
全量读取:
FileReader fr = new FileReader("a.txt");char[] c = new char[(int) (new File("a.txt").length())];fr.read(c);System.out.println(new String(c));
分块读取:
FileReader fr = new FileReader("a.txt");char[] c = new char[5];int tem;while ((tem = fr.read(c)) != -1) { System.out.print(new String(c, 0, tem));}
字符输出流:FileWriter
FileWriter 用于写入文本文件,与FileReader互补。
常用方法:
write(String str)
:写入字符串。write(String str, int off, int len)
:写入字符串的特定部分。close()
:释放资源。flush()
:立即写入磁盘。
示例代码:
FileWriter fw = new FileWriter("b.txt");fw.write("Hello World");fw.close();
缓冲流
缓冲流(Buffered IO)通过缓存数据在内存中,减少I/O操作次数,显著提高读写效率。
character stream improvements:
文件读取时,通常结合 BufferedReader 和 FileReader:
BufferedReader br = new BufferedReader(new FileReader("a.txt"));String line;while ((line = br.readLine()) != null) { System.out.println(line);}
文件写入时,结合 BufferedWriter 和 FileWriter:
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));bw.write("数据");bw.close();
转换流
转换流(Character Set)允许我们在读写时指定编码格式,解决不同系统间的编码差异。
读取文件:
FileInputStream fis = new FileInputStream("a.txt");InputStreamReader isr = new InputStreamReader(fis, "UTF-8");BufferedReader br = new BufferedReader(isr);String line;while ((line = br.readLine()) != null) { System.out.println(line);}
写入文件:
FileOutputStream fos = new FileOutputStream("b.txt");OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");BufferedWriter bw = new BufferedWriter(osw);bw.write("数据");bw.close();
读写二进制文件
二进制流处理文件的原始内容,适用于图片、视频等二进制数据。
读取二进制文件:
FileInputStream fis = new FileInputStream("picture.jpg");DataInputStream dis = new DataInputStream(fis);byte[] data = new byte[dis.available()];dis.read(data);System.out.println(new String(data));
写入二进制文件:
FileOutputStream fos = new FileOutputStream("picture.jpg");DataOutputStream dos = new DataOutputStream(fos);byte[] data = ...;dos.write(data);dos.close();
Java序列化和反序列化
序列化是将对象状态转换为二进制数据,反序列化则重建对象。
示例对象:
public class Student implements Serializable { private int id; private String name; private double score; public Student(int id, String name, double score) { this.id = id; this.name = name; this.score = score; } @Override public String toString() { return "Student{" + id + ", " + name + ", " + score + '}'; }}
序列化写入:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));oos.writeObject(new Student(1, "张三", 95));oos.close();
反序列化读取:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));Student student = ois.readObject();System.out.println(student);ois.close();
总结
Java 的输入输出流系统分为字节流和字符流等多种类型,适用于不同的应用场景。无论是简单的文件读写,还是复杂的二进制或序列化操作,都能通过合理选择流类型和配置来实现。掌握这些基础知识是Java编程的必备技能。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月02日 18时09分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Frame--Api框架
2019-03-11
Boostrap技能点整理之【网格系统】
2019-03-11
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2019-03-11
Git简单理解与使用
2019-03-11
echarts 基本图表开发小结
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
JDK9-15新特性
2019-03-11
TreeSet、TreeMap
2019-03-11
JVM内存模型
2019-03-11
可变长度参数
2019-03-11
3、条件查询
2019-03-11
cordova打包apk更改图标
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
文件系统的层次结构
2019-03-11
减少磁盘延迟时间的方法
2019-03-11
vue(渐进式前端框架)
2019-03-11
权值初始化和与损失函数
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11