java 中的流_Java中的流(IO
Java中的流(IO流.
java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能,可以从不同的角度对其进行分类:
按单位可分为: 字节流 (一个字节一个字节的读取) 字符流 (一个字符一个字符的读取『一个字符是两个字节』)
按功能不同可以分为: 节点流 (数据的传输) 处理流 (数据的处理)
按方向可以分为: 输入流 (相对于程序来说的) 输出流 (相对于程序来说的)
以下 输出输出流 图中深色的为节点流,浅色为处理流。 InputStream 继承自该类的流都是用于向程序中输入数据,且数据的单位为字节(8bit);
基本方法:
OutputStream 继承自该类的流是用于程序中输入数据,且数据的单位为字节(8bit);
基本方法:
Reader 继承自该类的流都是用于向程序中输入数据,且数据的单位为字符(16bit);
常用方法:
Writer 继承自该类的流都是用于程序中输入数据,且数据的单位为字符(16bit);
常用方法:
缓冲流: 缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,可以降低硬盘的读写次数,同时增加了一些新的方法。 SDK提供了四种缓存流,其常用的构造方法为:
转换流(转换编码):
Print流 用于输出
在使用中如下: new InputStreamReader(System.in);//监听读取键盘的输入 PrintWriter log = new PrintWriter(输入流); 另外实例: PrintStream ps = null; try { FileOutputStream fos = new FileOutputStream(“d:\\bak\\log.dat”); ps = new PrintStream(fos); } catch (IOException e) { e.printStackTrace(); } if(ps != null){ System.setOut(ps); }
Object流 该类的Object流是保存对象用的。 注意代码: FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); 才可进行写的操作。 要保存对象,必须要求该对象的实体类是可序列化的『Serializable』。 transient关键字 在序列化的实体类中,使用transient关键字修饰的属性,被修饰的属性被视作透明不存在的。 实现Externalizable接口是自己写序列化,保存对象的输出流方法。
具体如下图所示:
示例代码: public void InputStreamTest() { /** * 创建文件夹以及文件 */ String sep = File.separator; String path = “E:” + sep + “MyTest”; String fileName = “document.txt”; File file = new File(path, fileName); if (file.exists()) { System.out.println(“文件路径:”+file.getAbsolutePath()); System.out.println(“文件大小:”+file.length()); } else { file.getParentFile().mkdirs(); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
/** * 字节读取文件 */ try { FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); //这些Buffered**的都是处理流(缓冲) int b ; while ((b=bis.read())!=-1) { System.out.print((char)b); } bis.close(); System.out.println(“\n\n”); } catch (FileNotFoundException e) { // TODO Auto-generated catch block System.out.println(“未找到文件”); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
/** * 字符读取文件 */ try { FileReader fileReader = new FileReader(file); BufferedReader br = new BufferedReader(fileReader); int b ; while ((b=br.read())!=-1) { //使用br.readLine();可读一行数据 System.out.print((char)b); } br.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
/** * 字节输入文件 */ try { FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); String str = new String(“所有的中文测试”); byte[] c=str.getBytes(); bos.write(c); bos.flush(); bos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } /** * 字符输入文件 */ try { FileWriter fw = new FileWriter(file,true);//写上true代表在原有的字符串后面继续写入 BufferedWriter bw = new BufferedWriter(fw); String str = “受了点伤”; bw.write(str.toCharArray()); bw.flush(); //将缓存中的数据完全打印 bw.close(); } catch (IOException e) { // TODO Auto-generated catch block System.out.println(“文件读写错误”); e.printStackTrace(); } /** * Data数据流测试,这个子类是将对象保存到了“*.txt”文件中,在文件中显示乱码 * 因为是将对象保存到了 txt 文件中,所以无法正常显示。 */ try { FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos); double dou = Math.random(); System.out.println(dou); dos.writeDouble(dou); dos.flush(); dos.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } /** * Data数据流在程序之间的传递 */ try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeDouble(Math.random()); dos.writeBoolean(true); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); System.out.println(bais.available()); DataInputStream dis = new DataInputStream(bais); System.out.println(dis.readDouble()); System.out.println(dis.readBoolean()); dos.close(); dis.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } /保存对象///stu对象必须实现了Serializable接口,也就是必须可序列化 public void forSaveObject(Student stu){ try { FileOutputStream fos = new FileOutputStream(“E:/dd.dox”); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(stu); oos.flush(); oos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
java 中的流_Java中的流(IO相关推荐
- java 网络通讯用什么流_Java中打印流,网络通信协议,TCP通信的基础介绍
1-1.打印流 java.io.PrintStream:打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. PrintStream特点: 1).只负责数据 ...
- java byte数组转化为流_java中字节数组和字符串、IO流和字节数组之间的转换
在实际开发中经常会碰到乱码问题: 首先查看系统支持的编码方式,默认的编码方式 //检查java支持的编码 System.out.println(Charset.availableCharsets(). ...
- java中什么是字节流和字符流_java中字节流与字符流的区别是什么
字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...
- java文件与流_Java文件和流深入
1.什么是数据流? 数据流是指所有的数据通信通道.有两类流,InputStream and OutputStream,Java中每一种流的基本功能依赖于它们.InputStream用于read,Out ...
- java i o是什么流_Java I/O 流,输入流、输出流
Java中的流,可以从不同的角度进行分类. 按照数据流的方向不同可以分为:输入流和输出流. 按照处理数据单位不同可以分为:字节流和字符流. 按照实现功能不同可以分为:节点流和处理流. 输出流: 输入流 ...
- java 异常处理发生异常_Java中的异常处理
java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...
- java -jar 工作原理_Java 中的 jar ,天天见,可是你知道它的运行机制吗?
本文由读者 muggle 投稿,muggle 是一位极具极客精神的 90 后单身老实猿,他的博客地址是:http://muggle.javaboy.org/ 今天介绍两个大家每天都在用但是却很少去了解 ...
- java log日志函数_Java 中的 AWS Lambda 函数日志记录 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异.要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门. 本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. Ja ...
- java文件与流_Java文件与流
文件 文件管理通过java.io包下.file类 作用: 1.文件属性 2.文件检查 3.文件删除 4.不包含对其文件内容的处理 File类的构造 语法: File f =new File(Strin ...
最新文章
- 优化查询、访问量大时的优化
- 幅度和幅值有区别吗_克拉克 (Clark) 变换中等幅值 (2/3) 和等功率 (sqrt(2/3)) 变换的公式推导...
- Dotnet Core
- Linux mv命令
- 代码执行漏洞原理/防御
- 在线数据库设计ERD-ONLINE
- 在Windows Server2012系统中安装Oracle11g
- Python学习之路day3-文件操作
- 关于VOID *在cl与gcc的不同(无意中发现)
- 关于深度探索C++对象模型笔记
- 关于CefSharp在客户端运行报错的解决方案
- Eclipse安装中文语言包
- 微型计算机控制技术设计题库,微型计算机控制技术复习题答案
- LVDS学习笔记之lvds_transceiver设计及仿真
- linux 卸载二进制包,Ubuntu19.10系统的软件安装与卸载命令
- 计算机关机慢怎么解决方法,电脑关机很慢,详细教您win7电脑关机很慢的解决方法...
- PM Q7声卡使用教程
- 学习es6中class——整合阮一峰教程、MDN
- 人工智能技术与物联网的融合
- 密码 计算安全性 可证明安全性 无条件安全性
热门文章
- centos mysql php tomcat_Linux 安装JDK Tomcat MySQL的教程(使用Mac远程访问)
- VS2017无法启动
- PyMongo--非关系型数据库mongodb入门(一步一步 版)
- 趣话题:git三部曲(二)-拆分历史提交记录reset
- 荣耀v40可以升级华为鸿蒙,网传荣耀V40机型也能升级鸿蒙OS 首批更新机型有望是这5款...
- php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...
- 【算法图解|4】JavaScript 如何求数组的最大值和最小值
- 孙叫兽进阶之路之敏捷开发
- 当margin-top、padding-top的值是百分比时,分别是如何计算的?
- SVN:请求不到主机,应该如何解决?