学好JAVA保终身_JAVA IO 学习
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 学习相关推荐
- java新人培训_Java新人学习必要的步骤以及全套学习路线!
原标题:Java新人学习必要的步骤以及全套学习路线! 想学Java,刚开始有没有觉得无从下手呢?其实Java的基础知识点,并不多,但是一定要吃透,因为这是为后续核心的学习打下一个良好的基础.简单来说, ...
- java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...
为什么要会线程起名字呢? 你如果拿到一连串的Thread-01,Thead-02我想你应该会疯掉,看以下代码 package rs.thread.day0504; /** * @auther rs * ...
- java深度克隆_Java深入学习26:Java深度克隆
Java深入学习26:Java深度克隆 深克隆和浅克隆区别 浅克隆: 只copy对象引用,不copy对象本身.即对象地址不变,仍然只存在一个对象. 深克隆: 不仅拷贝对象本身,而且拷贝对象包含的引用指 ...
- java 流 中文_Java IO流之中文乱码
相信有过学过JavaEE的人们都有遇到过中文乱码问题吧,最简单的就是表单数据提交时中文出现乱码,乱码难解决吗?其实不难,只要掌握好编码的设置,乱码神马的一边去. 今天主要就讲讲一些常用的可以设置编码的 ...
- java 句柄无效_java.io.IOException:句柄无效
我正在尝试自己学习编程,但仍在尝试掌握它.我收到以下错误: java.io.IOException:句柄无效 这是我的代码 public class PrimeFinder { private int ...
- java 异步模型_Java IO编程全解(三)——伪异步IO编程
为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远 ...
- java切割输入流_java IO流之文件切割两例(含Properties 用法)
package cn.itcast.io.p1.splitfile; import java.io.File; import java.io.FileInputStream; import java. ...
- java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?
一般的类和方法,只能使用具体的类型,要么是基础数据类型,要么是自定义类. 如果要编写可以应用与多种类型的代码,这种刻板的限制对代码的束缚就会很大. 泛型的字面概念: 适合用于许多类型. 在面向对象中, ...
- java 布局教程_java布局学习(新)
坚持学习java一段时间,最近自己需要做一个小型的系统,所以需要自己将自己的AWT知识巩固一下. 一.4大布局管理器. 1.边界布局BorderLayout 是JFrame和JDialog的默认布局方 ...
最新文章
- WMI技术介绍和应用——查询系统服务
- 文章目录列表的字体颜色修改
- 缩放手势 ScaleGestureDetector 源码解析,这一篇就够了
- Ubuntu sublime text 3无法输入中文的解决办法
- Windows XP pro with sp2(x64)VOL版(英文原版)光盘镜像 + 简繁中文语言包 + 有效安装密钥 一些网友都有这样的困惑,Windows XP sp3在安装
- 图像检索评价指标:PR曲线的计算与绘制
- excel 某个单元格不是等于空值_EXCEL中IF函数中怎么表达某一个单元格不等于空白则返回值1.4...
- xp系统计算机怎么连接到网络打印机,windows xp系统如何连接不同网段共享打印机...
- 概念模型向逻辑模型的转换规则
- 常用网络命令:ping命令的使用
- 老年手机英文改中文_老年手机设置成英文怎么办
- android 沉浸式_【沉浸式体验】从民俗音乐到绘画雕塑,他们玩了这么多花样!...
- java: 错误: 找不到符号
- 技校可以学计算机平面设计吗,计算机平面设计免费试学服务为先_孙进技校
- 常用数据结构与经典算法 简单讲解与示例代码
- cordova获取手机IMEI
- 您可以在Windows PC或Android手机上使用iMessage吗?
- V语言04语句表达式
- AI贺新年,开发者的虎年这样过才有意思
- 汉诺塔问题详解 递归实现 C语言
热门文章
- python读写磁盘扇区数据_[Win32] 直接读写磁盘扇区(磁盘绝对读写)
- java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程
- mysql5.7.21压缩版_mysql5.7.21解压版安装配置图文
- 浪潮通信收入_浪潮获2019大数据“星河(Galaxy)”奖
- Java怎么用继承回复信息_JAVA面向对象-继承
- mysql多语言运营设计_多语言系统的数据库设计
- 三菱plc 毕设_PLC漏型和源型输入有何不同?
- windows上查看和设置weblogic的编码格式
- supermap试用许可过期如何重新申请
- 分布式锁概念与实现方案