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 等-提供将基础数据类型写入到文件中,或者读取出来,
java输入输出--I/O操作基础知识学习的更多相关文章
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
- (转)Linux基础知识学习
Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...
- JAVA面试题集之基础知识
JAVA面试题集之基础知识 基础知识: 1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...
- GCC基础知识学习
GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...
- Objective-c基础知识学习笔记
Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...
- Vue2基础知识学习
Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...
- Java中实现异常处理的基础知识
Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...
- 【ABAP系列】SAP ABAP-模块 字符串操作基础知识
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP-模块 字符串操 ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
随机推荐
- MySQL 事物和数据库锁
1.数据库事物 1. 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一 ...
- Codeforces Round #286 (Div. 2)A. Mr. Kitayuta's Gift(暴力,string的应用)
由于字符串的长度很短,所以就暴力枚举每一个空每一个字母,出现行的就输出.这么简单的思路我居然没想到,临场想了很多,以为有什么技巧,越想越迷...是思维方式有问题,遇到问题先分析最简单粗暴的办法,然后一 ...
- Object 的一个问题
var s1 = 'abc'; s1 instanceof String //false var s2 = new String('abc'); s2 instanceof Strin ...
- python lambda 用途
可以让一个带参数函数,传递并以无参调用 def test(a): print a a=test # #a() a=897987 fun=lambda : test(a) fun()
- CodeForces - 891C: Envy(可撤销的并查集&最小生成树)
For a connected undirected weighted graph G, MST (minimum spanning tree) is a subgraph of G that con ...
- .net core结合Consul集群&Docker实现服务治理
实战中的asp.net core结合Consul集群&Docker实现服务治理 https://www.cnblogs.com/guolianyu/p/9614050.html 0.目录 整体 ...
- Broken Keyboard(模拟数组或者双重链表的运用)
这题我是大写的服气,辛辛苦苦搞了个双重链表结果还一直不对,不对就算了,书上源代码打进去还是不对,我能怎么办我也很无奈.不过这题还是让我对双重链表更加了解和运用了!还是可以的! You’re typin ...
- 杂项之rabbitmq
杂项之rabbitmq 本节内容 rabbitmq简介 AMQP协议 rabbitmq使用 应用举例 rabbitmq简介 介绍rabbitmq之前,先介绍一下AMQP协议,因为rabbitmq就是基 ...
- JSONP原理及实现跨域方式
今天做页面时,后台给了个接口:https://a.a.com/a/a.json,我页面的上线地址是:http://b.b.com.显而易见,因为浏览器同源策略的限制,通过ajax无法无法取得json的 ...
- Httpclient远程调用WebService示例
我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种: 1.通过浏览器HTTP调用,返回规范的XML文件内容 2.通 ...