Java I/O输入输出流
IO流的复习总结
------注:蓝色背景段落是例子;红色背景的字段IO流的功能类。
编码问题
String s = "威力锅ABC";
//utf-8编码中文占用三个字节,英文占用一个字节
byte [] bytes = s.getBytes();//转换成字节序列用的是项目默认的编码(utf-8)
for(byte b:bytes) {
//toHexString 把字节(转换成了int)以16进制的方式显示。
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
//gbk编码中文占用两个字节,英文占用一个字节
byte [] bytes1 = s.getBytes("gbk");//指定字节(gbk)
for (byte b : bytes1) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
//Java是双字节编码utf-16be:中文和英文都要占两个字节
byte[] bytes2 = s.getBytes("utf-16be");
for (byte b : bytes2) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
/*当你的字节序列是某种编码时,这个时候把字节变成
* 字符串,也需要用这种编码方式,否则会出现乱码
* */
String str = new String(bytes2);
System.out.println(str);
String str0 = new String(bytes2,"utf-16be");
System.out.println(str0);
/*
* 文本文件就是字节序列
* 可以是任意编码的字节序列
* 如果我们在中文机上直接创建文本文件,那么该文本文件只认识ansi编码
* 联通、联这是一种巧合,他们正好符合了utf-8编码的规则
* */
File类的使用
java.io.File类用于表示文件/目录
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问
我不知道的:File file = new File("E:/resouce\\file\\text.txt");//双斜杠“\\”和反斜杠“/”是可以同等替代的
file.mkdir();//创建目录、file.createNewFile();创建新的文件;
RandomAccessFile的使用
RandomAccessFile Java提供的对文件内容的访问,既可以读文件,也可以写文件。
RandomAccessFile 支持随机访问文件,可以访问文件的任意位置。
(1)java文件模型
在硬件上的文件是byte byte byte存储的,是数据的集合
(2)打开文件
有两种模式"rw"(读写)"r"(只读)
RandomAccessFile raf = new RandomAccessFile(file,"rw/r");
因为支持随机访问文件,所以有文件指针,打开文件时指针在开头 pointer = 0;
(3)写方法
raf.write(int);--->只写一个字节(后8位),同时指针指向下一位,准备再次写入
(4)读方法
int b = raf.read();--->读一个字节
(5)文件写完后一定要关闭(Oracle 官方说明)
字节流的使用
(1)InputStream、OutputStream
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
(2)EOF = End 读到-1就读到结尾
(3)输入流基本方法
int b = in.read();读取一个字节无符号填到int低八位。-1是EOF
in.read(byte[]buf)读取数据填充到字节数组buf
in.read(byte[]buf,int start,int size)读取数据填充到字节数组buf,从buf的start位置开始,存放size长度的数据
(4)输出流基本方法
out.write(int b);写出一个bute到流,b的低八位
out.write(byte [] buf);将buf字节数组都写入到流
out.write(byte [] buf,int start,int size);
(5)FileInputStream---->具体实现了在文件上读取数据
(6)FileOutputStream实现了向文件中写出byte数据的方法
(7)DataOutputStream/DataInputStream
对“流”功能的扩展,可以更加方面的读取int,long,字符等类型数据
DateOutputStream
writeInt()/writeDouble()/writeUTF()
(8)BufferedInputStream & BuferedOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能
从应用程序中把数据放入文件,相当于将一缸水导入到另一个缸中:
FileOutputStream--->write()方法相当于将水一滴一滴地转移过去
DataOutputStream--->writeXxx()方法会方便一些,相当于把水一瓢一瓢地转移过去
BuferedOutputStream--->write方法更方便,相当于把水先一瓢一瓢地放入桶中,然后从桶中放入到另一个缸中
long start = System.currentTimeMillis();//获取当前时间点(毫秒)
字符流的使用
(1)编码问题
(2)认识文本和文本文件
Java的文本(char)是16位无符号整数,是字符unicode编码(双字节编码)
文件时byte byte byte ...的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果
(3)字符流(Reader Writer)--->注:字符流操作的是文本文件(因为mp3、二进制文件都是字节序列)
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/FileWriter
FileReader fr = new FileReader("e:/resouce/demo/FileWriter.txt");
FileWriter fw = new FileWriter("e:/resouce/demo/FileWriter.txt",true);
//多加了一个参数“true”后,复制的文件内容会追加到目标文件内容后边
字符流的过滤器
BufferedReader--->readLine一次读一行
BufferedWriter/PrintWriter--->写一行
对象的序列化和反序列化
(1) 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化
(2)序列化流(ObjectOutputStream),是过滤流----writeObject
反序列化流(ObjectInputStream)----readObject
(3)序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
//将对象序列化到文件file中
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(stu);
(4)transient关键字
Java I/O输入输出流的更多相关文章
- 第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
- Java复习7.输入输出流
Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...
- JAVA Io 缓冲输入输出流
java中提供带缓冲的输入输出流.在打开文件进行写入或读取操作时,都会加上缓冲,提高了IO读写性能. 1. BufferedInputStream 缓冲输入流 2. BufferedOutputStr ...
- Java I/O输入输出流详解
一.文件的编码 开发时一定要注意项目默认的编码!!!!!!!! 文件操作的时候一定要记得关闭!!!!!!!! ASCII:美国标准 ...
- Java IO学习--输入输出流
一.Java IO的定义 I/O:输入输出系统,由输入输出控制系统和外围设备两部分组成. Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输 ...
- java实验8-Java输入输出流
1 读写文件 [实验目的] (1)掌握文本文件的读写方法. (2)掌握随机文件的读写方法. (3)掌握InputStream.OutputStream抽象类的基本使用. (4)掌握FileInputS ...
- Java工具类-输入输出流
输入输出流 1.概念 输入输出流:文件复制,上传 输出流: System.out.println() 写操作,程序将字符流写入到"目的地",比如打印机和文件等 输入流 :Scann ...
- java学习笔记-输入输出流
================File类 =====================InputStream ==================OutputStream ============== ...
- Java中的输入输出流
FileInputStream和FileOutputStream 创建含磁盘文件的输入 输出流对象. FileInputStream继承自InputStream,用于读取本地文件中的字节数据,由于所有 ...
- 《三》Java IO 字节输入输出流
那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream) ...
随机推荐
- P2010 回文日期 题解
这题其实就是纯暴力,暴力,再暴力,毫无技巧可言(总之您怎么乱搞都不会超时QAQ) 首先,根据题意,我们明白每年自多产生一个回文日期,因为对于每年的三百多天,前四位是固定的. 所以,我们只需要进行一个从 ...
- phpstrom mac 快捷键
对应键 ⌘——Command ⌃ ——Control ⌥——Option/Alt ⇧——Shift ⇪——Caps Lock fn——功能键就是fn 编辑 Command+alt+T 用 (if..e ...
- ConcurrentHashMap实现原理
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),Con ...
- Java冒泡法和二分法
最近去一家公司面试,手贱在人家CTO面前自告奋勇写了一把冒泡法,结果在交换数据的时候出了洋相,回家反思,写下如下代码,对自己算是一个鞭策,得到的教训是不要眼高手低,低调前行. package com. ...
- 微信退款回调AES算法(AES-256-ECB)
解密步骤如下: (1)对加密串A做base64解码,得到加密串B (2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)--> ...
- 使用bitsadmin.exe 下载文件,配合bcn.bat玩出更多的花样~~
bitsadmin的简单介绍与基本用法: bitsadmin.exe 可以用来在windows 命令行下下载文件.bitsadmin是windows 后台智能传输服务的一个工具,windows 的自动 ...
- python基础16_闭包_装饰器
不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...
- python基础15下_迭代器_生成器
print(dir([])) #告诉我列表拥有的所有方法 # 双下方法 # print([1].__add__([2])) print([1]+[2]) ret = set(dir([]))& ...
- 继承 in her it
''' in her it 继承 de rive 派生 python2 (经典类|新式类) python3 (新式类) 1. What is inheritance? 什么是继承? 继承是一种新建类的 ...
- Matlab_spectrogram_短时傅里叶分析_实现与讨论
在语音与音乐处理过程中,常用到短时傅里叶变换(Short Time Fourier Transformation, STFT).在一些学习路径中,STFT也是学习小波之前的预备知识.本文简单实现了 M ...