Java精选笔记_其他IO流(ObjectInputStream、DataInputStream、PrintStream、标准输入输出流)
其他IO流
ObjectInputStream和ObjectOutputStream
如果希望永久将对象转为字节数据写入到硬盘上,即对象序列化,可以使用ObjectOutputStream(对象输出流)来实现。
当对象进行序列化时,必须保证该对象实现Serializable接口,否则程序会出现NotSerializableException异常
Person对象被序列化后会生成二进制数据保存在“objectStream.txt”文件中,通过这些二进制数据可以恢复序列化之前的Java对象,此过程称为反序列化,JDK提供了ObjectInputStream类(对象输入流)可以实现对象的反序列化
DataInputStream和DataOutputStream
是两个与平台无关的数据操作流。
它们不仅提供读写各种基本类型数据的方法,而且还提供了readUTF()和writeUTF()方法
数据输入流DataInputStream
允许应用程序从基础输入流中读取基本Java数据类型,如byte、int、float、boolean等
构造方法
DataInputStream(InputStream in) 使用指定的InputStream输入流创建一个DataInputStream对象
方法
public final int read(byte[] b) 从输入流中读取字节数据,并存储到字节数组b中
public final int read(byte[] b,int off,int len)
从输入流中将从偏移量off开始的len个字节读入一个字节数组中
public final boolean readBoolean()
读取一个输入字节,若该字节不是零,则返回true,若是零,则返回false
public final byte readByte() 该方法用于读取一个输入字节
public final char readChar() 该方法用于读取一个输入的char类型值并返回
public final double readDouble() 该方法用于读取8个输入字节,同时返回一个double值
public final float readFloat() 该方法用于读取4个输入字节,同时返回一个float值
public final int readInt() 该方法用于读取4个输入字节,同时返回一个int值
public final long readLong() 该方法用于读取8个输入字节,同时返回一个long值
public final short readShort() 该方法用于读取2个输入字节,同时返回一个short值
数据输出流DataOutputStream
允许应用程序以适当方式将基本Java数据类型写入输出流中,如byte、int、float、boolean等类型。然后,应用程序可以使用数据输入流将数据读入。
构造方法
DataOutputStream(OutputStream out) 创建一个新的数据输出流,将数据写入指定基础输出流
方法
writeBoolean() 写入boolean类型数据
writeByte() 写入byte类型数据
writeChar() 写入char类型数据
writeDouble() 写入double类型数据
writeFloat() 写入float类型数据
writeInt() 写入int类型数据
PrintStream字节打印流
该流提供了一系列用于打印数据的print()和println()方法,可以将各种数据类型的数据都原样打印出来,即将基本数据类型的数据或引用数据类型的对象格式化成字符串后再输出。
PrintStream字节打印流
构造函数可以接受的参数类型
1.file对象 File
2.字符串路径 String
3.字节输出流 OutputStream
方法
print(boolean b) 输出boolean类型数据
print(char c) 输出char类型数据
print(char[] s) 输出char数组类型数据
print(double d) 输出double类型数据
print(float f) 输出float类型数据
print(int i) 输出int类型数据
print(long l) 输出long类型数据
print(String s) 输出String类型数据
PrintWriter字符打印流
用于将字符数据进行格式化的输出
方法
print(boolean b)
输出boolean类型数据
print(char c)
输出char类型数据
print(char[] s)
输出char数组类型数据
print(double d)
输出double类型数据
print(float f)
输出float类型数据
print(int i)
输出int类型数据
print(long l)
输出long类型数据
print(String s)
输出String类型数据
练习:控制台输入后,打印在控制台
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
PrintWriter Out=new PrintWriter(System.in,true));
String line=true;
while((line=bufr.readLine())!=numm) {
if("over".equals(line))
break;
out.println(line);
}
out.close();
bufr.close();
标准输入输出流
在System类中定义了三个常量:in、out和err,它们被习惯性地称为标准输入输出流。
in为InputStream类型,它是标准输入流,默认情况下用于读取键盘输入的数据。
out为PrintStream类型,它是标准输出流,默认将数据输出到命令行窗口。
err也是PrintStream类型,它是标准错误流,它和out一样也是将数据输出到控制台,它输出的是应用程序运行时的错误信息。
PipedInputStream和ByteArrayOutputStream
称作管道流,它是一种比较特殊的流,必须先建立连接才能进行彼此间通信。
PipedOutputStream用于向管道中写入数据
PipedInputStream用于从管道中读取写入的数据
ByteArrayInputStream和ByteArrayOutputStream
ByteArrayInputStream是从缓冲区中读取数据
ByteArrayOutputStream类会在创建对象时就创建一个byte型数组的缓冲区,当向数组中写数据时,该对象会把所有的数据先写入缓冲区,最后一次性写入文件
CharArrayReader和CharArrayWriter
CharArrayReader是从字符数组中读取数据
CharArrayWriter是在内存中创建一个字符数组缓冲区
SequenceInputStream合并流(序列流)
对多个流进行合并
vactor<FileInputStream> v=new vactor<FileInputStream>();
v.add(new FileInputStream("1.txt"));
v.add(new FileInputStream("2.txt"));
v.add(new FileInputStream("2.txt"));
Enumeration<FileInputStream> en=v.elements();
SeaquenceInputStream sis=new SeaquenceInputStream(en);
FileOutputStream fos=new FileOutputStream("4.txt");
byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1) {
fos.write(buf,0,len);
}
fos.close();
sis.close();
SequenceInputStream类可以将几个输入流串联在一起,合并为一个输入流。当通过这个流来读取数据时,它会依次从所有被串联的输入流中读取数据,对程序来说,就好像是对同一个流进行操作。
Java精选笔记_其他IO流(ObjectInputStream、DataInputStream、PrintStream、标准输入输出流)的更多相关文章
- IO流(三)__字节流 标准输入输出流 转换流
一.字节流:FileInputStream 和FileOutputStream 基本操作和字符流类相同,没有flush,但是close还是要的 复制一个字节流文件 private static voi ...
- Java精选笔记_网络编程
网络编程 概述 现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈. 在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(C ...
- Java精选笔记_文件上传与下载
文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...
- Java精选笔记_集合【Map(映射)接口】
Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...
- Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)
线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...
- Java精选笔记_面向对象(包、访问控制、内存机制、垃圾回收机制)
包 包的定义与使用 专门用来存放类的,通常功能相同的类存放在相同的包中. 包的声明只能位于Java源文件的第一行 Java语言中的常用包 java.lang:包含Java语言的核心类,如String. ...
- Java精选笔记_国际化
国际化 什么是国际化 指软件在开发时就应该具备支持多种语言和地区的功能,当应对不同国家和地区的用户访问,针对不同国家和地区的用户,提供相应的.符合来访者阅读习惯的页面和数据. 由于国际化interna ...
- Java精选笔记_自定义标签
自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...
- Java精选笔记_会话技术
会话及其会话技术 会话概述 指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程. 会话:从浏览器开启到浏览器关闭.会话技术:用来保存在会话期间 浏览器和服务器所产生的数据. 在 ...
随机推荐
- Django---时间的时区问题
在用django1.8版本做项目的时候遇到时间的存储与读取不一致的问题,网上找了很多帖子,但都没有讲明白.本文将在项目中遇到的问题及如何解决的尽可能详细的记录下来,当然本文参考了网上大量相关文章. 在 ...
- 在eclipse中配置server和database
配置server,以tomcat为例 点击下图的tag 如果没有,就去这里找: 然后右键:new->server,根据你安装的server选择版本,然后finish就行了 然后你右键那个serv ...
- python traceback捕获并打印异常
异常处理是日常操作了,但是有时候不能只能打印我们处理的结果,还需要将我们的异常打印出来,这样更直观的显示错误 下面来介绍traceback模块来进行处理 try: 1/0 except Excepti ...
- pyQt绘图
def paintEvent(self, e): qp = QtGui.QPainter() qp.begin(self) self.DrawChessBoard(qp) self.Draw_Ches ...
- JAVA-JAVA、JavaScript、JavaWeb的关系
相关资料:1.http://www.cnblogs.com/youring2/archive/2013/06/06/3120645.html2.https://jingyan.baidu.com/ar ...
- 一款纯html5实现的人跑步动画
今天给大家分享一款纯html5实现的人跑步动画.这款动画中实现了人跑步的动画,且上面有三个按钮,分别是选择让这个跑步的拿什么武器,第一个是拿了一把剑,第二个是拿了一把斧头,第三个是不拿任保东西.效果图 ...
- hdu 5215 Cycle
题意:找到一个图中是否含有奇环和偶环 题解: 1.用了两种发法.一个就是跟bc给的答案一样,先求弱联通分量.再在环中找奇偶环 2.我想到的一个略微省些代码量的方法.边求联通分量,边推断是否含有奇环偶环 ...
- [转] Fragment——startActivityForResult后onActivityResult无反应之问题总结
转自:http://m.blog.csdn.net/article/details?id=49507025 摘取片段如下 个人测试后的一些总结: 1.Fragment中直接使用startActivit ...
- eclipse安装中文补丁包
第一步:打开http://www.eclipse.org/babel/ 第二步:找到downloads. 第三步:点击Oxygen. 第四步:找到简体中文的zip插件并兵下载. 第五步:解压. 第六步 ...
- powerdesigner与mysql数据库的连接
(1).在桌面新建一个mysql.dpc文件,里面可以什么内容也没有. (2).打开powerdesigner,操作如下: (3).把mysql.dcp文件选中: (4).建立连接属性: (5).测试 ...