java输入输出--I/O操作基础知识学习
一、java的I/O流
1. 输入流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(InputStream 和Reader作为基类)
2、输出流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(outputStream和Writer作为基类)
划分输入流和输出流是从内存角度考虑划分。如:数据从服务器通过网络流向客户端,server端的内存将数据输出到网络(用输出流),client将网络中的数据输入内存(用输入流)。
创建字节输入流代码: FileInputStream fis = new FileInputStream(new File("D://info.txt"));
创建字符输入流代码:FileReader fr = new FileReader(new File("D://info.txt"));
可能用到ileInputStream 和 InputStreamReader两个对象,来看FileInputStream 和 InputStreamReader的区别:
前者的构造函数是有一个文件类型的参数,没有设定编码,是读取的字节,需要用字节数组接受,至于你读取后的字节要转换为字符输出需要后续处理;
FileInputStream fis = null;
try {
fis = new FileInputStream(new File("D://info.txt"));
byte [] bbuf = new byte[1024];
int hasread = 0;
while((hasread = fis.read(bbuf))>0){
String str1 = new String(bbuf, "UTF-8");//to UTF-8 string
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
fis.close();
}
后者的构造函数是含有两个参数,一个是关联的文件File或FileReader,另一个则是字符串类型的字符编码,此时读取的数据已经不是字节,而是字符。
FileInputStream fr = null;
InputStreamReader ir = null;
try {
fr = new FileInputStream(new File("D://info.txt"));
ir = new InputStreamReader(fr,"UTF-8");
char [] cbuf = new char[32];
int hasread = 0;
while((hasread = ir.read(cbuf))>0){ //最多读取cbuf中的32个字符;
System.out.println(new String(cbuf));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
finally{
fr.close();
}
要关闭输入输出流,因为流不单在内存中分配了空间,也在操作系统中占有了资源,java的gc是能从内存中回收不使用的对象,但对操作系统分配的资源是无能为力的,所以要调用close()方法来通知os释放资源。
二、java节点流和处理流的概念:
节点流:可以从或者向一个特定的I/O设备(如磁盘、网络)读(写)数据,节点流与底层的I/O设备、文件交互。
处理流:用于包装节点流,是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
JAVA常用的节点流有以下几个:
文 件 FileInputStream 、FileOutputStrean、 FileReader 、FileWriter 文件进行处理的节点流。
字符串 StringReader、 StringWriter 对字符串进行处理的节点流。
数 组 ByteArrayInputStream 、ByteArrayOutputStream、CharArrayReader、 CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
管 道 PipedInputStream 、PipedOutputStream 、PipedReader、PipedWriter对管道进行处理的节点流。
父 类 InputStream 、OutputStream 、Reader 、Writer
常用处理流(关闭处理流需要关闭里面的节点流)
缓冲流:BufferedInputStrean、 BufferedOutputStream 、BufferedReader、 BufferedWriter,增加缓冲功能,避免频繁读写硬盘。
转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。
数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来,
最新文章
- openssl lhash 数据结构哈希表
- 《TCP/IP详解 卷1:协议》读书笔记
- .NET Core下使用gRpc公开服务(SSL/TLS)
- Java基础类型总结
- C-Lodop 非典型应用
- redis 持久化 如果 AOF 文件出错了,怎么办?
- Python开发库
- [转载]理解HTML语义化
- PHP命名规范【转】
- delphi 18 屏蔽和替换 右键菜单
- compile ffmpeg
- Linux 安装 Python3.5
- robot framework环境搭建
- 微信小程序测试方法总结
- 在java程序代码中打开文件
- 洛谷P1073 Tarjan + 拓扑排序 // 构造分层图
- 11gr2 RAC安装INS-35354问题一例
- IGMP Internet组管理协议 未完
- C# Windows程序窗口置前台的几种方法
- POJ 1300.Door Man 欧拉通路