Java流的分类

1.输入/输出流

输入流:只能向其读数据,不能写。

输出流:只能向其写数据,不能读。

所谓的输入输出都是相对应用程序而言的。

2.字节流/字符流

单位不同,字节流操作8位,字符流操作16位,2倍关系。

3.节点流/处理流

按照流的角色来分的。

节点流:从/向特定的IO设备读/写的流,也称低级流。

处理流:对于一个已经存在的流进行连接或包装,通过包装后的流来实现读写功能,也称高级流。

Java流概念模型

Java.io包里面有40多个类,看上去很凌乱负责,但实际有规律。所有类都继承自4个类,

InputStream

OutputStream

Reader

Writer

所有类的结构图如下:

其实是按字节流/字符流来分的。

上述4个类是抽象类的主要方法。

读,InputStream/Reader

有几个主要的方法:

Int read()读取单个字节/字符。

Int read(byte[] b/char[] c),读取给定数组的字节/字符。

Int read(byte[] b/char[] c, int off, int len)从字节/字符组中的off位置,读取len长度。

代码:

以FileInputStream和FileReader为例子:

public static void main(String[] args) throwsException{//TODO Auto-generated method stub

FileInputStream fis= new FileInputStream("TestFile1.java");byte[] bbuf = new byte[1024];int hasRead = 0;while((hasRead = fis.read(bbuf))>0){

System.out.print(new String(bbuf,0,hasRead));

}

fis.close();

}

View Code

这里byte数组的大小是1024,如果很小,或者为奇数的话,可能会出现读出来的是乱码。

public static void main(String[] args) throwsIOException {//TODO Auto-generated method stub

try{

fr= new FileReader("TestFile1.java");char[] cbuf = new char[32];int hasRead = 0;while ((hasRead = fr.read(cbuf)) > 0) {

System.out.print(new String(cbuf, 0, hasRead));

}

}catch(IOException e) {

e.printStackTrace();

}finally{

fr.close();

}

}

View Code

写,OutputStream/Writer

主要的方法:

Void write(c)写入指定的c个字节/字符。

Void write(byte[] b/char[] c)写入字节/字符数组中的数据。

Void write(byte[]/char[] buf, int off, int len)从字节/字符数组中的off位置写入len长度到输出流。

由于字符流以字符为单位,Writer可以用字符串来代替字符数组,于是有了2个新的方法:

Void write(string s)写入字符串s到流。

Void write(string s, int off, int len)从字符串s的off位置处写入len长度到流。

以FileOutputStream和FileWriter为例子:

public static void main(String[] args) throwsIOException {//TODO Auto-generated method stub

FileInputStream fis= null;

FileOutputStream fos= null;try{

fis= newFileInputStream(" TestFile1.java");

fos= newFileOutputStream(" NewFile.txt");byte[] bbuf = new byte[1024];int hasRead = 0;while ((hasRead = fis.read(bbuf)) > 0) {

fos.write(bbuf,0, hasRead);

}

}catch(IOException e) {

e.printStackTrace();

}finally{

fis.close();

fos.close();

}

}

View Code

FileWriter:

public static void main(String[] args) throwsIOException {//TODO Auto-generated method stub

FileWriter fw= null;try{

fw= new FileWriter("newFile2.txt");

fw.write("静夜思\r\n");

fw.write("床前明月光,\r\n");

fw.write("疑是地上霜,\r\n");

fw.write("举头望明月,\r\n");

fw.write("低头思故乡。\r\n");

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

fw.close();

}

}

View Code

Java序列化和反序列化

序列化即将对象转换成数据(二进制或xml文本),反序列化则相反。

Java序列化/反序列化用到的类:ObjectOutputStream/ObjectInputStream,它们都是处理流对象,接受节点流FileOutputStream/FileInputStream.

序列化/反序列化要求被处理的类继承Serializable接口。

例子:

//Person 类

public class Person implementsjava.io.Serializable {publicString Name;public intAge;public Person(String name,intage){this.Name=name;this.Age=age;

}

}public classTestSerialization {/***@paramargs

*@throwsClassNotFoundException*/

public static void main(String[] args) throwsClassNotFoundException {//TODO Auto-generated method stub

/*** Serialize*/

try{

ObjectOutputStream op= newObjectOutputStream(newFileOutputStream("Person.txt"));

Person p= new Person("Jackson", 24);

Person p2= new Person("Anne", 23);

op.writeObject(p);

op.writeObject(p2);

System.out.println("person info: name is " + p.Name + " ;age is: "

+p.Age);

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}/*** DeSerialize*/

try{

ObjectInputStream ip= new ObjectInputStream(newFileInputStream("Person.txt"));

Person p=(Person) ip.readObject();

Object o;while ((o = ip.readObject()) != null) {

Person pp=(Person) o;

System.out.println("name: " + pp.Name + ",Age:" +pp.Age);

}

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

View Code

学好JAVA保终身_JAVA IO 学习相关推荐

  1. java新人培训_Java新人学习必要的步骤以及全套学习路线!

    原标题:Java新人学习必要的步骤以及全套学习路线! 想学Java,刚开始有没有觉得无从下手呢?其实Java的基础知识点,并不多,但是一定要吃透,因为这是为后续核心的学习打下一个良好的基础.简单来说, ...

  2. java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...

    为什么要会线程起名字呢? 你如果拿到一连串的Thread-01,Thead-02我想你应该会疯掉,看以下代码 package rs.thread.day0504; /** * @auther rs * ...

  3. java深度克隆_Java深入学习26:Java深度克隆

    Java深入学习26:Java深度克隆 深克隆和浅克隆区别 浅克隆: 只copy对象引用,不copy对象本身.即对象地址不变,仍然只存在一个对象. 深克隆: 不仅拷贝对象本身,而且拷贝对象包含的引用指 ...

  4. java 流 中文_Java IO流之中文乱码

    相信有过学过JavaEE的人们都有遇到过中文乱码问题吧,最简单的就是表单数据提交时中文出现乱码,乱码难解决吗?其实不难,只要掌握好编码的设置,乱码神马的一边去. 今天主要就讲讲一些常用的可以设置编码的 ...

  5. java 句柄无效_java.io.IOException:句柄无效

    我正在尝试自己学习编程,但仍在尝试掌握它.我收到以下错误: java.io.IOException:句柄无效 这是我的代码 public class PrimeFinder { private int ...

  6. java 异步模型_Java IO编程全解(三)——伪异步IO编程

    为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远 ...

  7. java切割输入流_java IO流之文件切割两例(含Properties 用法)

    package cn.itcast.io.p1.splitfile; import java.io.File; import java.io.FileInputStream; import java. ...

  8. java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?

    一般的类和方法,只能使用具体的类型,要么是基础数据类型,要么是自定义类. 如果要编写可以应用与多种类型的代码,这种刻板的限制对代码的束缚就会很大. 泛型的字面概念: 适合用于许多类型. 在面向对象中, ...

  9. java 布局教程_java布局学习(新)

    坚持学习java一段时间,最近自己需要做一个小型的系统,所以需要自己将自己的AWT知识巩固一下. 一.4大布局管理器. 1.边界布局BorderLayout 是JFrame和JDialog的默认布局方 ...

最新文章

  1. WMI技术介绍和应用——查询系统服务
  2. 文章目录列表的字体颜色修改
  3. 缩放手势 ScaleGestureDetector 源码解析,这一篇就够了
  4. Ubuntu sublime text 3无法输入中文的解决办法
  5. Windows XP pro with sp2(x64)VOL版(英文原版)光盘镜像 + 简繁中文语言包 + 有效安装密钥 一些网友都有这样的困惑,Windows XP sp3在安装
  6. 图像检索评价指标:PR曲线的计算与绘制
  7. excel 某个单元格不是等于空值_EXCEL中IF函数中怎么表达某一个单元格不等于空白则返回值1.4...
  8. xp系统计算机怎么连接到网络打印机,windows xp系统如何连接不同网段共享打印机...
  9. 概念模型向逻辑模型的转换规则
  10. 常用网络命令:ping命令的使用
  11. 老年手机英文改中文_老年手机设置成英文怎么办
  12. android 沉浸式_【沉浸式体验】从民俗音乐到绘画雕塑,他们玩了这么多花样!...
  13. java: 错误: 找不到符号
  14. 技校可以学计算机平面设计吗,计算机平面设计免费试学服务为先_孙进技校
  15. 常用数据结构与经典算法 简单讲解与示例代码
  16. cordova获取手机IMEI
  17. 您可以在Windows PC或Android手机上使用iMessage吗?
  18. V语言04语句表达式
  19. AI贺新年,开发者的虎年这样过才有意思
  20. 汉诺塔问题详解 递归实现 C语言

热门文章

  1. python读写磁盘扇区数据_[Win32] 直接读写磁盘扇区(磁盘绝对读写)
  2. java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程
  3. mysql5.7.21压缩版_mysql5.7.21解压版安装配置图文
  4. 浪潮通信收入_浪潮获2019大数据“星河(Galaxy)”奖
  5. Java怎么用继承回复信息_JAVA面向对象-继承
  6. mysql多语言运营设计_多语言系统的数据库设计
  7. 三菱plc 毕设_PLC漏型和源型输入有何不同?
  8. windows上查看和设置weblogic的编码格式
  9. supermap试用许可过期如何重新申请
  10. 分布式锁概念与实现方案