Java基础——IO
来源:互联网 发布:槽钢抗弯强度计算软件 编辑:程序博客网 时间:2024/06/01 09:45
一、概述
I/O,Input/Output输入输出。输入机制比如读取文件数据、用户键盘输入等,输出,比如将数据输出到磁盘等。
Java的IO是以流(Stream)为基础的。
流的叫法十分形象,你可以想象数据在被读取或写入时动态的状态。
如果把输入(出)设备当成一个管道,那么流就是这个管道中的information信息或数据。
二、体系
IO体系结构大致如上图所示,流式部分是基础也是重点。
三、分类
java中存在各式各样的流,按照不同的分类角度,先做个大致的了解。
1、流向
输入流:只读不写
输出流:只写不读
从程序运行所在内存的角度来理解“方向”:
1)输出
2)输入
2、数据单元
字节、字符流的用法几乎完全一样,最大的区别就在于前者操作的是8位的字节,而后者是16位的字符。
字节流的基类是InputStream、OutputStream,字符流是Reader和Writer。
下面通过InputStream和Reader看一下,操作十分类似,核心方法read()也只是参数类型不同,一个byte,一个char。同样输出流也是如此。
public abstract class InputStream implements Closeable { public int read(byte b[]) throws IOException { return read(b, 0, b.length); } ......}public abstract class Reader implements Readable, Closeable { public int read(char cbuf[]) throws IOException { return read(cbuf, 0, cbuf.length); }}
字符/节的输出
前面提到InputStream、Reader等都是抽象基类,因此例子中使用的实现类FileReader或FileInputStream。
public static void main(String[] args) { try { //字符流 FileReader fis=new FileReader("G:/TGB/Demo/TaotaoResult.java"); char[] biff=new char[32]; //字节流 /*FileInputStream fis=new FileInputStream("G:/TGB/Demo/TaotaoResult.java");*/ /*byte[] biff=new byte[1024];*/ int hasRead=0; //重复读取 while((hasRead=fis.read(biff))>0){ System.out.println(new String(biff,0,hasRead)); } //关闭文件流 fis.close(); } catch (IOException e) { e.printStackTrace(); } }
执行后,在Console中输出“G:/TGB/Demo/TaotaoResult.java”中的代码内容。
字符/节的输入
与输出相比,输入就比较容易了,不会涉及大量的循环读取。
FileWriter fw; try { fw = new FileWriter("G:/TGB/Demo/1.txt"); fw.write("你好"); fw.write("hi"); fw.write("hello"); } catch (IOException e) { e.printStackTrace(); }
运行程序后,会在制定路径下生成1.txt文件,内容即给定的信息。
3、角色
节点流是与特定节点(如内存、设备等)读写数据,又称低级流。相应的,处理流是对一个已经存在的流进行连接或封装,高级流。
处理流包装节点流是一种装饰模式的体现,更封装更加方便,因此也称为包装流。
以InputStreamReader为例,来介绍处理流的使用。
public static void main(String[] args) { try { //将System.in转换成Reader InputStreamReader reader=new InputStreamReader(System.in); //包装成BufferedReader,缓冲 BufferedReader br=new BufferedReader(reader); String line=null; //只有输入exit时,程序退出 while((line=br.readLine())!=null){ if(line.equals("exit")){ System.exit(1);; } System.out.println("输出:"+line); } } catch (Exception e) { } }
System.in是java的标准输入流,即键盘输入。他是InputStream的实例,不方便使用。首先InputStreamReader将输入的文本内容转换为字符输入流,还可以包装一层缓冲,利于读取。
小结
本篇博客介绍了Java IO的基本概念和操作,下篇博客继续介绍IO中的重要内容:序列化和NIO。
- java基础—IO
- Java基础——IO
- java基础学习—IO
- Java基础—IO流
- java基础—-IO流
- java基础—IO流
- java基础—IO流
- Java基础——Java IO详解
- Java基础——IO(流)
- 【Java基础】——IO:概念原理
- Java基础(十二)——IO流
- java基础——IO流
- Java基础——IO流
- java基础——IO总结
- 黑马程序员——Java基础---IO
- java基础——IO流
- JAVA基础——IO流
- 黑马程序员——java基础--IO
- 专访|腾讯、阿里、adidas的服务方UID WORKS
- 拍照权限被第三方禁用
- UNITY Rigidbody 参数设置
- Service
- (3)使用Redis作为消息队列服务场景应用案例
- Java基础——IO
- org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: 29 near line 1, column
- Java核心技术(五) —— 泛型程序设计(1)
- 全国省市级联关系表sql语句
- iOS应用实现评论功能的两种方法
- C++中struct和class的区别
- markdown 的语法介绍
- arm-linux下的多线程调试
- Mysql细节