一、java的I/O流

1. 输入流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(InputStream 和Reader作为基类)

2、输出流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(outputStream和Writer作为基类)

划分输入流和输出流是从内存角度考虑划分。如:数据从服务器通过网络流向客户端,server端的内存将数据输出到网络(用输出流),client将网络中的数据输入内存(用输入流)。

创建字节输入流代码: FileInputStream    fis = new FileInputStream(new  File("D://info.txt"));

创建字符输入流代码:FileReader   fr = new FileReader(new  File("D://info.txt"));

可能用到ileInputStream    和 InputStreamReader两个对象,来看FileInputStream    和 InputStreamReader的区别:

前者的构造函数是有一个文件类型的参数,没有设定编码,是读取的字节,需要用字节数组接受,至于你读取后的字节要转换为字符输出需要后续处理;

FileInputStream  fis = null;

 try {

fis = new FileInputStream(new  File("D://info.txt"));

byte [] bbuf = new byte[1024];

int hasread = 0;

while((hasread = fis.read(bbuf))>0){

String str1 = new String(bbuf, "UTF-8");//to UTF-8 string  

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

finally{

fis.close();

}

后者的构造函数是含有两个参数,一个是关联的文件File或FileReader,另一个则是字符串类型的字符编码,此时读取的数据已经不是字节,而是字符。

FileInputStream  fr = null;

InputStreamReader  ir = null;

 try {

fr = new FileInputStream(new  File("D://info.txt"));

ir  = new InputStreamReader(fr,"UTF-8");

char [] cbuf = new char[32];

int hasread = 0;

while((hasread = ir.read(cbuf))>0){ //最多读取cbuf中的32个字符;

System.out.println(new String(cbuf));

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

finally{

fr.close();

}

要关闭输入输出流,因为流不单在内存中分配了空间,也在操作系统中占有了资源,java的gc是能从内存中回收不使用的对象,但对操作系统分配的资源是无能为力的,所以要调用close()方法来通知os释放资源。

二、java节点流和处理流的概念:

节点流:可以从或者向一个特定的I/O设备(如磁盘、网络)读(写)数据,节点流与底层的I/O设备、文件交互。

处理流:用于包装节点流,是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

JAVA常用的节点流有以下几个:  

  文 件 FileInputStream 、FileOutputStrean、 FileReader 、FileWriter 文件进行处理的节点流。

  字符串 StringReader、 StringWriter 对字符串进行处理的节点流。

  数 组 ByteArrayInputStream 、ByteArrayOutputStream、CharArrayReader、 CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。

    管 道 PipedInputStream 、PipedOutputStream 、PipedReader、PipedWriter对管道进行处理的节点流。

    父 类 InputStream 、OutputStream 、Reader 、Writer

常用处理流(关闭处理流需要关闭里面的节点流)

  缓冲流:BufferedInputStrean、 BufferedOutputStream 、BufferedReader、 BufferedWriter,增加缓冲功能,避免频繁读写硬盘。

  转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。

  数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来,

java输入输出--I/O操作基础知识学习的更多相关文章

  1. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  2. (转)Linux基础知识学习

    Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...

  3. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

  4. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  5. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  6. Vue2基础知识学习

    Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...

  7. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  8. 【ABAP系列】SAP ABAP-模块 字符串操作基础知识

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP-模块 字符串操 ...

  9. java Reflection(反射)基础知识讲解

    原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...

随机推荐

  1. 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它

    dpkg应用程序被占用 错误提示: E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他 ...

  2. C#中的索引器的简单理解和用法

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了数组和集合成员时,索引器 ...

  3. 剑指offer--10.最小的K个数

    边界判断,坑了一下 ----------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:375643 本题知识点: 数组 ...

  4. 2018.8.10 programming bat based on python

    @echo off REM Current DevProg Version. Match the pip package version (x.y.z)SET currentversion=0.4.0 ...

  5. codewar代码练习2——7级晋升6级

    7级晋升到6级的过程中以做6级题以及以前未完成的题目为主,一般选择算法题或者基础题.相比之前从8级升级7级(参见此博客:http://blog.csdn.net/m0_37324740/article ...

  6. bzoj 4710 分特产

    有 $n$ 个人,$m$ 种物品,每种物品有 $a_i$ 个,求每个人至少分到一个的方案数 $n,m,a_i \leq 2000$ sol: 比上一个题简单一点 还是考虑容斥 每个人至少分到一个 = ...

  7. python+rabbitmq实现分布式

    #master # -*- coding: utf-8 -*-import sys#reload(sys)sys.setdefaultencoding("utf-8") impor ...

  8. 隐藏select中的“请选择”项

    <select> <option value="" style="display: none">请选择</option> & ...

  9. poj 2262 Goldbach's Conjecture——筛质数(水!)

    题目:http://poj.org/problem?id=2262 大水题的筛质数. #include<iostream> #include<cstdio> #include& ...

  10. poj 3463 Sightseeing——次短路计数

    题目:http://poj.org/problem?id=3463 当然要给一个点记最短路和次短路的长度和方案. 但往优先队列里放的结构体和vis竟然也要区分0/1,就像把一个点拆成两个点了一样. 不 ...