java Io流的应用
标准输入输出流
1.1标准输入流
源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。在java中用System.in 得到一个InputStream字节输入流。
[1]在控制台输入一句话,然后原样输出
package Io2; import java.io.IOException;
import java.io.InputStream; public class Test01 {
public static void main(String[] args) throws IOException {
//system.in是字节输入流InputStream
InputStream in=System.in;
//一次性读取的字节数和长度
byte[] buf=new byte[1024];
int len;
len=in.read(buf);
String str=new String(buf, 0, len);
System.out.println(str);
}
}
nihao
nihao
标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; //需求:从控制台高效读取一行数据。把一首诗写入文件。
public class Test02 {
public static void main(String[] args) throws IOException {
// [1] system.in是控制台字节输入流InputStream
InputStream in = System.in;
// 【3】 输入的是字节流,通过字节转换器转换成字符流 读取到cpu
InputStreamReader reader = new InputStreamReader(in, "GBK");
// [2] 编写快速字节读取管道,实现读的对象 字节-------字符
BufferedReader br = new BufferedReader(reader); // 【4】 创建file文件
File file = new File("D:\\javatest\\l.txt");
// 【6】 cpu的是字符流,写入文件中需要转换成字节流 需要一次性写入多个,FileWriter
FileWriter writer = new FileWriter(file);
// OutputStreamWriter writer=new OutputStreamWriter(out, "GBK")
// 【5】 编写快速字节写入管道,字符-----字节
BufferedWriter bw = new BufferedWriter(writer);
String end = "bye";
while (true) {
String line = br.readLine();
if (line.equals(end)) {
break;
} bw.write(line);
bw.newLine();
}
bw.flush();
bw.close();
writer.close();
}
}
1.2 标准输出流(PrintStream)
数据目的地是标准输出设备(显示器)等输出设备。在java中用System.out得到一个PrintStream 字节输出流(字节打印流)。提供了更强大的
println
打印方法用于打印各种数据类型。
需求:读取文件,显示到标准输出设备
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream; public class Test04 {
public static void main(String[] args) throws IOException {
File file = new File("d:\\javatest\\k.txt");
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
//PrintStream 字节输出流(字节打印流)
PrintStream ps = System.out;
String line;
while ((line = br.readLine()) != null) {
ps.println(line);
}
}
}
1.3 Scanner
通过scanner扫描文件、字节流等
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
// 扫描平台默认编码的文件
public class Test03 {
public static void main(String[] args) throws IOException {
File file = new File("d:\\javatest\\k.txt");
Scanner sc = new Scanner(file);
String line;
while (sc.hasNextLine()) {
line = sc.nextLine();
System.out.println(line);
} }
}
1.4 序列化
把内存中的对象永久保存到硬盘的过程称为对象序列化,也叫做持久化。
把硬盘持久化的内存恢复的内存的过程称为对象反序列化。
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化,并抛出异常
Serializable接口没有方法或字段,仅用于标识可序列化的语义
public class Student implements Serializable{
// 。。。
1.5 序列化对象
ObjectOutputStream 继承于OutputStream,专门用于把对象序列化到本地。提供了
writeXXX
writeObject() 用于写入一个对象
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream; public class Test05 {
public static void main(String[] args) throws IOException {
Student stu=new Student("001", "张三", 20, Gender.男);
File file =new File("D:\\javatest\\m.txt");
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(out);
oos.writeObject(stu);
oos.close();
out.close();
System.out.println("格式化完成");
}
}
ObjectInputStream 继承于InputStream ,专门用于把本地持久化内容反序列化到内存,提供了
readXXX
readObject() 用于读取一个序列化内容并返回一个对象。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream; public class Test06 {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
File file = new File("D:\\javatest\\m.txt");
FileInputStream in = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(in);
// readObject() 用于读取一个序列化内容并返回一个对象。
Student stu = (Student) ois.readObject();
System.out.println(stu.getId());
System.out.println(stu.getName());
System.out.println(stu.getAge());
System.out.println(stu.getGender());
ois.close();
in.close();
}
}
001
张三
20
男
1.5 序列化版本
当序列化完成后,后期升级程序中的类(Student),此时再反序列化时会出现异常。
异常原因:序列化流的serialVersionUID和升级后类的版本不匹配。
解决方案:给Student类加序列化版本号,有两种方式
default serial version ID 生成默认的serial version ID 一般值都是1L。
generated serial version ID 根据当前类的属性、方法生成一个唯一ID。
public class Student implements Serializable {
private static final long serialVersionUID = -6876240585925178921L;
transient
开发过程中,如果想忽略某些字段不让其序列化时,可以使用transient修饰。
public class Student implements Serializable {
private static final long serialVersionUID = -6876240585925178921L;
private String id;
//忽略某些字段不让其序列化时,可以使用transient修饰
private transient String name;
private transient int age;
1.6 DataInputStream/DataOutputStream
DataOutputStream 继承OutputStream,专门用于把基本java数据类型写入输出流。提供了writeXXX 写入基本java数据类型。
DataInputStream 继承于InputStream,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
DataInputStream/DataOutputStream 特别适合读取/写入在网络传输过程中的数据流。
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class Test07 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\javatest\\n.txt");
FileOutputStream out=new FileOutputStream(file);
DataOutputStream dos=new DataOutputStream(out);
dos.writeInt(10);
dos.writeUTF("hellow中国");
dos.close();
out.close();
System.out.println("ok");
}
}
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class Test08 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\javatest\\n.txt");
FileInputStream in=new FileInputStream(file);
DataInputStream dis=new DataInputStream(in);
int a=dis.readInt();
String string=dis.readUTF();
System.out.println(a);
System.out.println(string);
}
}
注意:
以什么顺序写入基本java数据类型,就以什么顺序读取基本java数据类型。
写入基本java数据类型
java Io流的应用的更多相关文章
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 揭开Java IO流中的flush()的神秘面纱
大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- Java IO流题库
一. 填空题 Java IO流可以分为 节点流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...
- Java IO流总结
Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...
- java io流 运行错误时,保存异常到文件里面
java io流 运行错误时,保存异常到文件里面 下面这个实例,运行后,输入数字,为正确,如果输入字符串,则报错,保存错误信息 //运行错误时,保存异常到文件里面 //下面这个实例,运行后,输入数字, ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- java io流 数据流传输
java io流 数据流传输 把这段当公式用就可以了 //数据流传输 import java.io.*; public class Index{ public static void main(Str ...
随机推荐
- Wireshark抓包常见问题解析(转)
1. tcp out-of-order(tcp有问题) 解答: 1). 应该有很多原因.但是多半是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元 因为他们可能是通过不同的 ...
- UCloud-201809-001:Redis服务未授权访问漏洞安全预警
UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间 2018-09-11更新时间 2018-09-11漏洞等级 HighCVE编号 ...
- 数据ETL是指什么
ETL是数据抽取(Extract).清洗(Cleaning).转换(Transform).装载(Load)的过程.是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义 ...
- 每天一个linux命令(1): which命令
0.学习时间: 2014-05-15 which命令用来在PATH指定的路径中查找特定的文件, 并返回第一个找到的结果. 1. 命令格式: which 文件名 2.命令功能 一般使用which命令来 ...
- JavaScript —— 给函数参数设置默认值
一.ES5 function fn(x, y){ y = y || 20; console.log(x, y); } fn(); // undefined 20 fn(5); // 5 20 fn(5 ...
- 找顺数【数位dp】
输出1到n中含有6的数的个数. 样例输入 100 样例输出 19 找规律感觉好难想(好像是什么100以内有19个,200以内有19*2个,600以内115个,700以内214个...,1000以内有2 ...
- IDEA入门(1)--lombok和Junit generator2插件的运用
前言 最近在慕课网看到了一些视频,准备从0开始做一个电商网站.视频中的大牛用的java的IDE都是IDEA,让我很纠结.从as到MyEclipse,好不容易稍微熟悉了一下MyEclipse的基本操作, ...
- Run As none applicable
详解如何在myeclipse中运行JSP,Run As none applicable(图) 内容提要:对JSP的访问都是用浏览器进行的,没有Run on Server这个选项. 在MyEclip ...
- GMTC2019|闲鱼-基于Flutter的架构演进与创新
2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地.未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 Flutter是 ...
- Android学习笔记之 SimpleAdapter 中添加按钮响应事件,getView的重写
Andriod 里面的ListView是一个显示列表数据的控件,常用适配器SimpleAdapter进行绑定,绑定代码如下: ListView lstView = (ListView) this.fi ...