Java IO流
来源:互联网 发布:mac如何查看qq群文件 编辑:程序博客网 时间:2024/06/16 10:07
笔记
一、基本知识
带缓冲IO和不带缓冲IO以及直接IO:
一般所说的带缓冲IO指标准IO,不带缓冲的IO与标准IO对应,更明确的说法似乎叫normal IO。标准IO和normal IO所指的“缓冲”位于用户进程,不论标准IO还是normal IO其内核都是有缓冲的,只有直接IO内核才没有缓冲区。
从IO中读取流程分别如下:
标准IO:IO设备->内核缓冲区->用户进程缓冲区->从用户进程缓冲区读取
normal IO:IO设备->内核缓冲区->读取
直接IO:IO设备->读取
内核缓冲区作用:系统可预读取IO设备
用户进程缓冲区:减少内核态与用户进程态的切换
二、java IO流
-
字节流:InputStream OutputStream系列
字符流:Reader Writer系列 -
InputStreamReader(InputStream)采用默认编码表,将字节流按照特定的编码方式读取 - 测试
package io流;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.nio.charset.Charset;public class IoStudy { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub InputStream in = new BufferedInputStream(System.in,100); int a = in.read(); System.out.println(a); }}
测试控制台输入a,abc,输出都是97
输入1,12,输出都是49
查看jdk可以知道BufferedInputStream.read()读入缓冲区下一个字节
4.
控制台输入整数、字符串、数组
下面这种写法是不能正确获得控制台的int数据的。觉得因为即使在控制台输入int型数据,但控制台并不能知道输入的是什么类型数据,所以控制台输入的数据按照默认的方式(目测把控制台的输入都当作了文本)按照二进制保存在缓存区里,在缓冲区里的二进制数据就不与希望的int数据对应,而是与int对应的ASCII码值,想要获得控制台输入的int数据比较麻烦。
public static void main(String[] args) throws IOException { // TODO Auto-generated method stub InputStreamReader in = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(in); int a = (int)br.read(); System.out.println(a); }
下面这种方法比较方便:
Scanner sc = new Scanner(System.in); System.out.println("Please Enter Name:"); String name = sc.nextLine(); //读取字符串型输入 System.out.println("Please Enter Age:"); int age = sc.nextInt(); //读取整型输入 System.out.println("Please Enter Salary:"); float salary = sc.nextFloat(); //读取float型输入 System.out.println("Name:" + name +" " + "Age:"+age + " "+"Salary:"+salary);
5.
文件、管道
读取管道流的相关API有
- 字符方式读写:
PipedWriter out = new PipedWriter(); char[] in = "in".toCharArray(); out.write(in[0]);
另个进程或线程里获得out后直接
(char)out.read();
- 字节流读写管道
PipedOutputStream out = new PipedOutputStream();
6 . 缓冲区(这里指的是用户进程缓冲区不是内核缓冲区)减少了对操作系统读写函数的调用,所以减少了内核态与用户态的切换
0 0
- JAVA【IO一】IO流
- Java-IO-java的IO流
- java IO 流
- JAVA之IO流
- java IO(字符流)
- java的io流
- JAVA之IO流(
- JAVA 基础IO流
- JAVA 中的IO流
- Java IO 流学习
- JAVA 中的IO流
- Java IO流操作方法。。
- java io流总结
- 转]JAVA IO流
- JAVA IO流
- Java中的IO流
- JAVA IO 流操作
- 详述JAVA IO流
- 密码算法
- 深刻理解HDFS工作机制
- LruCache缓存
- Vuex 模块化与项目实例 (2.0)
- 【C语言简单说】十:小结
- Java IO流
- PAT 1001
- ffmpeg--解码h264
- Swift 类的继承 convenience required
- 1182
- hdoj2037 今年暑假不AC
- 进程管道
- Bone Collector——01背包
- 你不知道的JS读书笔记1—闭包&作用域