温故而知新(六)Java基础:IO流(此文章暂时未写完)
来源:互联网 发布:上海萌动网络 编辑:程序博客网 时间:2024/05/17 15:18
输入流和输出流的类层次图
I/O简介
Java提供了两种类型的输入输出流:一种是面向字节的流,数据的处理以字节为基本单位;另一种是面向字符的流,用于字符数据的处理。
字节流
字节流(Byte Stream)每次读写8位二进制数,也称为二进制字节流字符流
字符流一次读写16位二进制数,并将其做一个字符而不是二进制位来处理注意:为满足字符的国际化表示,Java语言的字符编码采用的是16位的Unicode码,而普通文本文件中采用的是8位ASCⅡ码
常用I/O流
从上图可以看出,流的结构层次来说有很多。这里只介绍常用的几种。
字节流
- InputStream字节输入流
FileInputStream : 从文件中读取的输入流BufferedInputStream : 缓存输入流 //构造方法InputStream f = new FileInputStream("D:/aa.apk");//或:File f = new File("D:/aa.apk");InputStream out = new FileInputStream(f);
常用方法:
- OutputStream字节输出流
FileOutputStream : 写入文件的输出流BufferedOutputStream : 缓冲输出流 //构造方法 // 创建一个向指定File对象表示的文件中写入数据的文件输出流 FileOutputStream(File file) // 创建一个向指定File对象表示的文件中写入数据的文件输出流 FileOutputStream(File file, boolean append) // 创建一个向具有指定名称的文件中写入数据的输出文件流 FileOutputStream(String name) // 创建一个向具有指定name的文件中写入数据的输出文件流 FileOutputStream(String name, boolean append)
常用方法:
字符流
- Reader字符输入流
InputStreamReader :(转换流)将字节转换到字符的输入流 ——> FileReader : 从文件读取的输入流BufferedReader : 缓冲输入字符流
- Writer 字符输出流
OutputStreamWriter:(转换流)将字节转换到字符的输出流 ——> FileWriter: 输出到文件的输出流BufferedWriter: 缓冲输出字符流
使用详解
- FileInputStream / FileOutputStream
public class Test { public static void main(String[] args) { try { long timeMillis = System.currentTimeMillis(); InputStream is = new FileInputStream("D:/aa.apk"); OutputStream os = new FileOutputStream("D:/ec.apk"); /** * 指定数组的大小,一次读取一个数组 之所以用1024,因为在计算机下的表示二进制,编译器你这些2的幂次方得数据处理特别快。 */ /** * 1024*1024(是1m)和 1024*1024*1024 (10m) 这样读取文件时他们的速度为什么会比4*1024慢,影响的原因是什么 * 如果是1m或更大,这样读写时相当于先读1M在写1M,这样循环速度就慢了,但是循环次数也少了。 * * * 数组大在内存中长度就越大,站的内存也越大,但是循环次数减少。 数组小在内存中长度就越小,占的内存小,但是循环次数变多了。 * * * 数组给的太大也不好,太小也不好。所以影响读写速度的关键在于设备当前的内存和cpu来决定速度的 * */ byte[] i = new byte[4 * 1024];// 作为一个缓冲区 int i2 = 0; try { while ((i2 = is.read(i)) != -1) { System.out.print(new String(i, 0, i2) + " ");// AB CD os.write(i, 0, i2); } is.close(); os.close(); long timeMillis1 = System.currentTimeMillis(); System.out.println(String.valueOf(timeMillis1 - timeMillis) + ">>>>>>>>>>>"); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
阅读全文
0 0
- 温故而知新(六)Java基础:IO流(此文章暂时未写完)
- (未写完)Zookeeper学习(六):利用Zookeeper实现配置管理
- 设计模式经典国产文章(但未写完)
- bzoj1977(未写完题解)
- 温故而知新(一)Java基础:基本数据类型
- 12-15-2014-集合(未写完)
- 未写完题目(待改进)?!
- 数据库复习总结(未写完...)
- IAR调试错误总结(未写完)
- 网络工程师必备知识(未写完)
- Spring知识点总结(未写完)
- VB鼠标绘图基础资料总结(转载)--------注: 可惜作者未写完
- 温故而知新(五)java基础:String、StringBuffer 、StringBuilder
- JAVA菜鸟(六)IO流
- Java IO(六):RandomAccessFile
- Java整理(六)IO
- Java基础(IO流)
- Java温故而知新之IO操作
- RETON锐盾KVM发布分辨率高达4K的16路HDMI分配器
- yii2 常用组件 -- 表单
- 我swoole爬坑记,swoole安装和小demo(1)
- 权限系统--系统数据库设计
- 实现跑马灯效果的TextView
- 温故而知新(六)Java基础:IO流(此文章暂时未写完)
- _tcsncpy_s的src 会被自动覆盖成 fe fe fe fe
- 分布式通讯类型及特点
- Ruby 字符串(String)
- bzoj3944: Sum
- 【Java利器之】Intellij Idea--Debug使用(mac)
- 快速排序 -- 算法小结
- Longest Common Substring
- Java+SpringMVC中自实现定时加载更新数据库数据到内存的方法