Java IO(四)
在文件操作流中,输入输出的目标都是文件,但是有时候,我们并不需要写入文件,只是需要中转一下而已,这样就会显得很麻烦,所以我们就可以使用内存操作流。在内存操作流中,输入输出目标都是内存。
内存输出流:ByteArrayOutputStream
内存输入流:ByteArrayInputStream
package com.fuwh.stream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream; public class ByteArrarOutputInputStreamTest01{ public static void main(String[] args) throws Exception{
//想内存中写入内容,然后读取
String message="this is 内存操作流!";
InputStream is=new ByteArrayInputStream(message.getBytes()); //将message保存在内存输入流中
OutputStream os=new ByteArrayOutputStream(); //定义一个内存输出流
int temp=0;
while((temp=is.read())!=-1){ //从内存输入流中读取一个字节的内容
char c=(char) temp;
os.write(Character.toUpperCase(c));
}
System.out.println(os.toString());
}
}
PipedOutputStream管道输入流:
PipedInputStream管道输出流:
管道流表示的是两个进程之间的通信。需要将两个管道进行连接。
实例:
package com.fuwh.stream; import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream; //定义一个向管道写入的线程类
class Send implements Runnable { private PipedOutputStream output=null; public Send(){
this.output=new PipedOutputStream();
} public PipedOutputStream getPipedOutputStream(){
return this.output;
}
@Override
public void run() {
String sendMessage="what's the 操蛋!!!";
try {
output.write(sendMessage.getBytes());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
try {
this.output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} //定义一个从管道读入的线程类
class Receive implements Runnable{ private PipedInputStream input; public Receive(){
this.input=new PipedInputStream();
} public PipedInputStream getPipedInputStream(){
return this.input;
} @Override
public void run() {
// TODO Auto-generated method stub
byte b[]=new byte[1024];
int length=0;
try {
length=this.input.read(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(b,0,length));
} } public class PipedStreamTest01 {
public static void main(String[] args) throws IOException {
Send send=new Send();
Receive receive=new Receive();
send.getPipedOutputStream().connect(receive.getPipedInputStream());
new Thread(send).start(); //启动线程
new Thread(receive).start(); //启动线程
}
}
管道字符输出流PipedWriter:
管道字符输入流PipedReader:
实例:
package com.fuwh.stream; import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter; //定义一个写入管道的线程类
class Out implements Runnable{ private PipedWriter out; public Out(){
this.out=new PipedWriter();
} public PipedWriter getPipedWriter(){
return this.out;
} @Override
public void run() {
// TODO Auto-generated method stub
String writerMessage="in 苦逼 find 乐趣!!!";
try {
this.out.write(writerMessage);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
try {
this.out.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
} //定义一个读取管道中内容的线程类
class In implements Runnable{ private PipedReader in; public In(){
this.in=new PipedReader();
} public PipedReader getPipedReader(){
return this.in;
} @Override
public void run() {
// TODO Auto-generated method stub
char[] message=new char[1024];
int length=0;
try {
length=this.in.read(message);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(new String(message,0,length));
} } public class PipedReaderWriterTest01 {
public static void main(String[] args) throws IOException {
Out out=new Out();
In in=new In();
out.getPipedWriter().connect(in.getPipedReader());
new Thread(out).start();
new Thread(in).start();
}
}
对象输出流:ObjectOutputStream
对象输入流:ObjectInputStream
对象流实现了对象的传输,但是只有实现了Serializable接口或Externalizable接口的类才能被传输。该类的构造方法如下:
·ObjectOutputStream()
·ObjectOutputStream(OutputStream out)
从第二个构造方法可以看出,该类根据实例化的方式不同,可以想不同的地方写入对象。
实例:
package com.fuwh.stream; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age; public Student(){} public Student(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} }
public class FileObjectStreamTest01 { public static void main(String[] args) throws Exception {
//向文件中写入对象
Student s=new Student("刘备",33);
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("object.txt")));
oos.writeObject(s);
oos.close();
//从文件中读取对象
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("object.txt")));
Student newStudent=(Student)ois.readObject();
System.out.println(newStudent);
ois.close();
}
}
Java IO(四)的更多相关文章
- Java IO(四)
对象序列化 对象序列化又叫对象的持久化,对象的串行化(或反串行化) 当使用Serializable接口实现序列化操作时,如果一个对象中的某个属性不希望被序列化,则可以使用transient关键字进行声 ...
- java IO(四):键盘录入
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 系统学习 Java IO (四)----文件的读写和随机访问 FileInputStream/FileOutputStream & RandomAccessFile
目录:系统学习 Java IO---- 目录,概览 文件输入流 FileInputStream 这是一个简单的FileInputStream示例: InputStream input = new Fi ...
- Java IO(四--字符流基本使用
在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { ...
- 系统学习 Java IO ---- 目录,概览
Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...
- Java IO编程全解(四)——NIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...
- Java IO(四)——字符流
一.字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2 ...
- Java IO(十四) CharArrayReader 和 CharArrayWriter
Java IO(十四) CharArrayReader 和 CharArrayWriter 一.介绍 CharArrayReader 和 CharArrayWriter 是字符数组输入流和字符数组输出 ...
- Java IO(四) InputStream 和 OutputStream
Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...
- Java IO学习笔记四:Socket基础
作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...
随机推荐
- RabbitMQ 发布订阅持久化
RabbitMQ是一种重要的消息队列中间件,在生产环境中,稳定是第一考虑.RabbitMQ厂家也深知开发者的声音,稳定.可靠是第一考虑,为了消息传输的可靠性传输,RabbitMQ提供了多种途径的消息持 ...
- windows+CMake+mingw 搭建c c++开发环境
layout: post title: "windows+CMake+mingw 搭建c c++开发环境" date: 2018-03-30 22:23:06 tags: wind ...
- Leetcode 28——Implement strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- 听翁恺老师mooc笔记(13)--类型定义和联合
typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...
- C语言博客作业—数组
一.PTA实验作业 题目1:简化的插入排序 1. 本题PTA提交列表 2. 设计思路 (1)定义n,number,i,j,temp; (2)输入n; (3)定义数组a[n+1]; //把所有的数都放入 ...
- Bate敏捷冲刺每日报告--day5
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- oc中protocol、category和继承的区别
OC中protocol.category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下. 利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"( ...
- .net mvc 利用分部视图局部刷新.
页面利于$.Ajax: $(function(){ $("#btnpartview").click(function () { var model = []; model.push ...
- JQ 上传文件(单个,多个,分片)
最原始的方式: 前端代码: <div> <span>最原始的方式</span><br /> <span>条件1:必须是 post 方式< ...
- VMware vCenter Server 6.5.0 U1
VMware vCenter Server 6.5.0 U1gName: VMware-VCSA-all-6.5.0-8024368.iso Release Date: 2018-03-20 Buil ...