输入流与输出流

1,流的分类:字节流和字符流 区别如下:

1,字节流(8位Unicode)在操作的时候本身是不会用到缓冲区(内存)的byte,是与文件本身直接操作的,而字符流(16位Unicode)在操作的时候是使用到缓冲区的char

2,字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,

并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

3,在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。

2,File类

3,I\O流

1,

输入流:从其他数据源写入到代码内存

输出流:从代码内存写入到指定数据源中

2,流分类:

1,节点流有:FileInputStream,FileReader,ArrayInputStream等,对接数据源

处理流:套接在节点流(或处理流)之上的

2,缓存流有:BufferedInputStream,BufferedReader等加快读写速率

3,数据流有:DataInputStream减少数据类型的转换,在网络编程多

4,对象流有:ObjectInputStream,需要对对象序列化,网络编程多

5,打印流有:Print,控制输入,输出的目的地。

3,案例

3.1 字节流进行文件copy

  1. static void testByte(String source ,String target){
  2. final int SIZE=1024;
  3. try {
  4. InputStream in=new FileInputStream(source);// 快捷键:ctrl+alt+t try..catch
  5. BufferedInputStream bufIn=new BufferedInputStream(in,SIZE);
  6. OutputStream out=new FileOutputStream(target,true);
  7. BufferedOutputStream bufOut=new BufferedOutputStream(out);
  8. byte [] byteArr=new byte[SIZE];// if inbuf.size>byte.length ,will have Exception:String index out of range: 105
  9. int len;
  10. while((len=bufIn.read(byteArr))!=-1){
  11. //in.read(buf) 注意点:read()为原生方法,该方法能记录住你上次读取的位置,所以while不会每次都重头开始读文件
  12. //in.read(buf) 将读取的文件字节保存到buf中,并返回读取了多少字节
  13. //Buffer的作用即将文件中先读入缓存,需要先满足Buff的数组容量,(所以byteArr的容量要大于BuffSize)然后将缓存中一起读入byteArr中,
    避免一字节一字节来读到byteArr
  14. bufOut.write(byteArr,0,len);//如果没有len,会按SIZE来写,不足用NULL填充
  15. }
  16. bufOut.flush();
  17. bufOut.close();
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. }

3.2 字符流进行文件copy

  1. //通过字符进行copy文件,使用Buffer和File
  2. static void testChar(String source ,String target){
  3. final int SIZE=1024;
  4. try {
  5. Reader in=new FileReader(source);// 快捷键:ctrl+alt+t try..catch
  6. BufferedReader bufIn=new BufferedReader(in,SIZE);
  7. Writer out=new FileWriter(target, true);//是否对文件进行追加处理
  8. BufferedWriter bufOut=new BufferedWriter(out);
  9. String temp;
  10. bufOut.write("使用字符操作的结果");
  11. while((temp=bufIn.readLine())!=null){
  12. bufOut.write(temp);//不包括换行符,这里
  13. bufOut.newLine();//没该句就不会换行
  14. }
  15. bufOut.flush();
  16. bufOut.close();
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }

3.3 byteArray和DataInput测试

  1. //数据流 byteArray和Data
  2. static void testByteData(){
  3. ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
  4. DataOutputStream dataOut=new DataOutputStream(byteOut);
  5.  
  6. try {
  7. dataOut.writeUTF("你好啊");//用writeChars,导致后面无法读
  8. dataOut.writeDouble(0.33334);
  9. dataOut.close();
  10. System.out.println(byteOut.size()+""+byteOut.toByteArray().length);//19 19即字节的个数
  11. ByteArrayInputStream byteIn=new ByteArrayInputStream(byteOut.toByteArray());//需要在写完后读,即需要读取最新的
  12. DataInputStream dataIn=new DataInputStream(byteIn);
  13. System.out.println(dataIn.readUTF());
  14. System.out.println(dataIn.readDouble());
  15. dataIn.close();
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. }

3.4 File字节流和Data字符流

  1. //数据流 Data和File
  2. static void testeFileData(String target){
  3. String[] name={"知识","zsf","succ"};
  4. double[] hig={13.4,34.4,43,24};
  5. int[] age={34,243,34};
  6. try {
  7. OutputStream out=new FileOutputStream(target);
  8. BufferedOutputStream buf=new BufferedOutputStream(out,1024);
  9. DataOutputStream dataOut=new DataOutputStream(buf);
  10. for(int i=0;i<3;i++){
  11. dataOut.writeUTF(name[i]);
  12. dataOut.writeChar('\t');
  13. dataOut.writeDouble(hig[i]);
  14. dataOut.writeChar('\t');
  15. dataOut.writeInt(age[i]);
  16. dataOut.writeChar('\n');
  17. }
  18. dataOut.close();
  19. InputStream in=new FileInputStream(target);
  20. BufferedInputStream bufIn=new BufferedInputStream(in,1024);
  21. DataInputStream dataIn=new DataInputStream(bufIn);
  22. String str=null;
  23. for(int i=0;i<3;i+=1){//需要事先知道文件中存储的格式和行数
  24. System.out.print(dataIn.readUTF());
  25. dataIn.readChar();
  26. System.out.print(dataIn.readDouble());
  27. dataIn.readChar();
  28. System.out.print(dataIn.readInt());
  29. dataIn.readChar();
  30. }
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. }

3.5 对象流和byteArray流

  1. void testObjectByte(){
  2. User user1=new User("知识",4);
  3. User user2=new User("知识",4);
  4. ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
  5. try {
  6. ObjectOutputStream objOut=new ObjectOutputStream(byteOut);
  7. objOut.writeObject(user1);
  8. objOut.writeObject(user2);
  9. byte[] data=byteOut.toByteArray();//
  10. ByteArrayInputStream byteIn=new ByteArrayInputStream(data);
  11. ObjectInputStream objIn=new ObjectInputStream(byteIn);
  12. User u=(User)objIn.readObject();
  13. System.out.println(u.age+"\t"+u.name);
  14. System.out.println(objIn.readObject());
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. class User implements Serializable{
  20. private static final long serialVersionUID = 1L;
  21. public String name;
  22. public int age;
  23. public User(String name,int age){
  24. this.name=name;
  25. this.age=age;
  26. }
  27. public String toString(){
  28. return name+"\t"+age;
  29. }
  30. }

3,6 文件流和对象流

  1. class User implements Serializable{
  2. private static final long serialVersionUID = 1L;
  3. public String name;
  4. public int age;
  5. public User(String name,int age){
  6. this.name=name;
  7. this.age=age;
  8. }
  9. public String toString(){
  10. return name+"\t"+age;
  11. }
  12. }
  13. //对象流和文件 字符型没有该方法
  14. void testObjectFile(String source){
  15. User user1=new User("你好",5);
  16. User user2=new User("你好",5);
  17. try {
  18. OutputStream outputStream=new FileOutputStream(source);
  19. ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
  20. objectOutputStream.writeObject(user1);
  21. objectOutputStream.writeObject(user2);
  22. InputStream inputStream=new FileInputStream(source);
  23. ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);
  24. User user=(User)objectInputStream.readObject();
  25. System.out.println(user.name+"\t"+user.age);
  26. System.out.println(objectInputStream.readObject());
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30.  
  31. }

3.7 转换流

  1. //转换流
  2. static void testSteamReader(String source,String target){
  3. try {
  4. InputStream in=new FileInputStream(source);
  5. Reader reader=new InputStreamReader(in,"utf-8");
  6. BufferedReader bufRead=new BufferedReader(reader);
  7. CharArrayWriter charArr=new CharArrayWriter();
  8. FileWriter writer=new FileWriter(target);
  9. String line;
  10. while((line=bufRead.readLine())!=null){
  11. System.out.println(line+"okl");
  12. charArr.write(line);
  13. System.out.println(charArr.toString());
  14. writer.write(line);
  15. }
  16.  
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }

4 小结

1,关键总结输出流和输入流

2,节点流和处理流的应用场景

3,多看api

java学习之输入,输出流的更多相关文章

  1. java学习笔记-输入输出流

    ================File类 =====================InputStream ==================OutputStream ============== ...

  2. 第27章 java I/O输入输出流

    java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...

  3. Java复习7.输入输出流

    Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...

  4. JAVA Io 缓冲输入输出流

    java中提供带缓冲的输入输出流.在打开文件进行写入或读取操作时,都会加上缓冲,提高了IO读写性能. 1. BufferedInputStream 缓冲输入流 2. BufferedOutputStr ...

  5. Java I/O输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  6. java实验8-Java输入输出流

    1 读写文件 [实验目的] (1)掌握文本文件的读写方法. (2)掌握随机文件的读写方法. (3)掌握InputStream.OutputStream抽象类的基本使用. (4)掌握FileInputS ...

  7. Java工具类-输入输出流

    输入输出流 1.概念 输入输出流:文件复制,上传 输出流: System.out.println() 写操作,程序将字符流写入到"目的地",比如打印机和文件等 输入流 :Scann ...

  8. Java中的输入输出流

    FileInputStream和FileOutputStream 创建含磁盘文件的输入 输出流对象. FileInputStream继承自InputStream,用于读取本地文件中的字节数据,由于所有 ...

  9. 《三》Java IO 字节输入输出流

    那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream)     ...

随机推荐

  1. TCP面试题之三次握手过程

    TCP简介: 1.面向连接的.可靠的.基于字节流的传输层的通信协议: 2.将应用层的数据流分割成报文段并发送给目标节点的TCP层: 3.数据包都有序号,对方收到则发送ACK确认,未收到则重传: 4.使 ...

  2. 最简单的基于FFmpeg的AVDevice例子(读取摄像头)【转】

    转自:http://blog.csdn.net/leixiaohua1020/article/details/39702113 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[- ...

  3. python 独立环境安装

    python 即使是单独编译安装的,库文件的安装还是会与其它python的库存放到相同的地方 使用同版本库不会有问题,但是需要升级库的时候,就会出现冲突,导致依赖这个旧库的python出现问题 这时候 ...

  4. 【linux高级程序设计】(第十四章)TCP高级应用 3

    控制socket文件描述符属性 1.set/getsockopt()修改socket属性 int getsockopt (int __fd, int __level, int __optname, v ...

  5. node.js批量重命名文件

    把当前路径的img文件夹里面的文件加上.png后缀 var fs = require("fs"); var path = 'img' fs.readdir(path, functi ...

  6. laravel-u-editor工具栏语言切换的方法

    更改/config/app.php/locale,可支持en,zh_CN,zh_TW,我们一般设为zh_CN

  7. (2)oracle服务、建库

     一.oracle的服务 oracle 11g安装后服务一般是7到8个 1.Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务(非必须启动) 2.Oracle ...

  8. 51nod 1086 背包问题 V2 【二进制/多重背包】

    1086 背包问题 V2  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放 ...

  9. 离别在须臾——AFO

    始于 2016-12-25 终于 2017-11-30 一开始就陷入了颓废的坑,然后,直至 2017 年暑假,颓废的气息一发不可收拾, 从 Q_fight 到 aoqi_baitian ,从 大主宰 ...

  10. java代码中执行liunx命令

    public static String runShell(String command){ try{ String[] commands = isLinux()?new String[]{" ...