黑马程序员第五季——IO流
来源:互联网 发布:255hh的新域名网站 编辑:程序博客网 时间:2024/05/22 03:41
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件、内存、IO设备等数据的流向。
流按操作数据分为两种:字节流和字符流。
流按流向分为:输入流和输出流。
字节流的抽象基流:InputStream和OutputStream
字符流的抽象基流:Reader和Writer
二 字节流
字节流是最基本的流,文件的操作、网络数据的传输等等都依赖于字节流。而字符流常常用于读取文本类型的数据或字符串流的操作等等。
import java.io.FileInputStream;public class myInputStream {public static void main(String[] args) throws Exception {T t = new T();t.getClassName();}}class T {public void getClassName() throws Exception {FileInputStream fileInputStream = new FileInputStream("d:/11.txt");int t=fileInputStream.read();while(t!=-1){System.out.print((char)t); t=fileInputStream.read();}fileInputStream.close();}}
三 字符流
public static void main(String[] args) throws Exception { // 声明一个File对象 File file = new File("hellowolrd.txt"); // 声明一个Write对象 Writer writer = null; // 通过FileWriter类来实例化Writer类的对象并以追加的形式写入 writer = new FileWriter(file, true); // 声明一个要写入的字符串 String str = "字符串形式写入Helloworld"; // 写入文本文件中 writer.write(str); // 刷新 writer.flush(); // 关闭字符输出流 writer.close(); }
四 转换流
转换流是指将字节流与字符流之间的转换,包含两个类:InputStreamReader和OutputStreamWriter。
转换流的出现方便了对文件的读写,她在字符流与字节流之间架起了一座桥梁,使原本毫无关联的两种流操作能够进行转化,提高了程序的灵活性。
何时使用转换流?
1.
如果使用非默认编码保存文件或者读取文件时,需要用到转换流,因为字节流的重载构造方法中有指定编码格式的参数,而FielReader 与 FileWriter 是默认编码的文本文件
比如:
当我们使用默认GBK编码保存文本时,下面2句代码其实是一样的效果,
new OutputStreamWriter(new FileOutputStream("out.txt"))
new FileWriter("out.txt")
当要求保存为其他编码比如UTF-8时,就要这样写
new OutputStreamWriter(new FileOutputStream("out.txt"),"UTF-8")
而如果要读取一个UTF-8编码的文本文件时,同样的要用
new InputStreamReader(new FileInputStream("in.txt"),"UTF-8");
而不能用new FileWriter("in.txt")
2.
当文件是字节文件时:
读取:提高效率用BufferedReader的独有快速方法时,需要转换。FileInputStream BufferedReader
输出:提高效率一般用BufferedWriter缓存,需要转换。FileOutputStream BufferedWriter
当文件是字符流时:需要转换。
计算机处理的是字节数据
读取时:将字符转换为字节,FileReader BufferedRead
输出时:将字节转换为字符,FileWriter BufferedWriter
总之,不论是字节文件还是字符文件,提高效率一般会用转换流的。
还是废话不多说,上代码:
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.InputStreamReader;/** * *//** * @author lenovo * */public class myInputStream {public static void main(String[] args) throws Exception {T t = new T();t.getClassName();}}class T {public void getClassName() throws Exception {File f = new File("src/config/test.properties");FileInputStream fileInputStream = new FileInputStream(f);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String s = bufferedReader.readLine();StringBuffer str=new StringBuffer();//String s;// int t = fileInputStream.read();// FileReader fileReader=new FileReader(f);// int t=fileReader.read();while (s != null) { str.append(s);//System.out.print(str);s = bufferedReader.readLine();// t = fileInputStream.read();// t=fileReader.read();}/** * readLine()每读取一行,指针会自动下移到下一行,直到末尾为空,返回null */while((s=bufferedReader.readLine())!=null){System.out.print(s);}bufferedReader.close();}}五 缓冲流
java IO通过缓冲流来提高读写效率,普通的字节、字符流都是一个字节一个字符这样读取的,而缓冲流则是将数据先缓冲起来,然后一起写入或者读取出来。
经常使用的是readLine()方法,表示一次读取一行数据。
package com.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class TestBufferedString { public static void main(String[] args) throws Exception { // 指定要读取文件的缓冲输入字节流 BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:\\photo\\IMG0460A.jpg")); File file = new File("F:\\IMG0460A.jpg"); if (file != null) { file.createNewFile(); } // 指定要写入文件的缓冲输出字节流 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); byte[] bb = new byte[1024];// 用来存储每次读取到的字节数组 int n;// 每次读取到的字节数组的长度 while ((n = in.read(bb)) != -1) { out.write(bb, 0, n);// 写入到输出流 } out.close();// 关闭流 in.close(); }}
六 字节数组流 与数据流
ByteArrayInputStream :字节数组输入流
ByteArrayOutputStream :字节数组输出流
DataInputStream :数据输入流
DataOutputStream :数据输出流
我写这个是非常实用的,大家玩网络游戏的时候,我们怎么知道彼此间的数据,
往往是将数据转换成字节,然后发送,你接受后然后再将字节转换成数据显示。
下面,我将写一个程序,是将一个long类型的数写入到字节数组中,然后再将字节数组转换成long类型的数。
废话不多说,上代码
public class Output { public static void main(String[] args) throws IOException { long i=10; byte[] b; //变量在定义的时候可以赋值,但在调用的时候就要有值。 //成员变量,系统会初始化,赋默认值。 //System.out.print(i); ByteArrayOutputStream bos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(bos); dos.writeLong(i); b=bos.toByteArray(); dos.close(); bos.close(); ByteArrayInputStream bis=new ByteArrayInputStream(b); DataInputStream dis=new DataInputStream(bis); long a=dis.readLong(); System.out.print(a);
何时使的。
- 黑马程序员第五季——IO流
- 黑马程序员-----IO流(第五篇)
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO
- 黑马程序员———IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——java IO流
- 就是这个美女程序员,写出了让阿波罗成功登陆月球的代码!
- C++编译器与连接器区别
- Struts2之国际化
- SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 解决办法
- 揭开Socket编程的面纱
- 黑马程序员第五季——IO流
- codeforces 204A Little Elephant and Interval (数位dp)
- 关于自学的个人见解1
- Java程序运行时间的计算
- jffs2文件系统上mmap函数
- poj 1775 01背包(子集和)
- OpenGL 纹理贴图
- Java同步问题详解
- win7 VS2010搭建Qt开发环境