? 
输入输出流子类众多,详情见下图:

用来操作内存
ByteArrayInputStream ? ? 内存到程序 不需要关闭 不使用内存资源,内存不够建议不用
ByteArrayOutputStream 程序到内存 不需要关闭 不使用内存资源,内存不够建议不用

内存输入流和内存输出流:
首先创建字节数组,一般引用数据类型存放在内存中。显然此时,可以创建字节数组输入流,读入程序当中。
<span style="color: #0000ff">import<span style="color: #000000"> java.io.ByteArrayInputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> ByteArrayInputStreamDemo {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) <span style="color: #0000ff">throws</span><span style="color: #000000"> IOException {
</span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated method stub
</span><span style="color: #008000">//</span><span style="color: #008000">1.创建字节数组(要读取的数据)</span>
<span style="color: #0000ff">byte</span>[] data= {10,15,50,33,12,22<span style="color: #000000">};
</span><span style="color: #008000">//</span><span style="color: #008000">2.创建流</span>
ByteArrayInputStream bais=<span style="color: #0000ff">new</span><span style="color: #000000"> ByteArrayInputStream(data);
</span><span style="color: #008000">//</span><span style="color: #008000">3.读取
<span style="color: #008000">//<span style="color: #008000"> int d;
<span style="color: #008000">//<span style="color: #008000"> while((d=bais.read())!=-1) {
<span style="color: #008000">//<span style="color: #008000"> System.out.println(d);
<span style="color: #008000">//<span style="color: #008000"> }
<span style="color: #008000">//<span style="color: #008000"> bais.close();//实际操作中无需关闭流
<span style="color: #0000ff">byte[] buf=<span style="color: #0000ff">new <span style="color: #0000ff">byte[1024<span style="color: #000000">];
<span style="color: #0000ff">int<span style="color: #000000"> len;
<span style="color: #0000ff">while((len=bais.read(buf))!=-1<span style="color: #000000">) {
<span style="color: #0000ff">for (<span style="color: #0000ff">int i = 0; i < len; i++<span style="color: #000000">) {
System.out.println(buf[i]);
}
}
}
}
<div class="cnblogs_code">
<span style="color: #0000ff">import<span style="color: #000000"> java.io.ByteArrayOutputStream;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> ByteArrayOutputStreamDemo {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
</span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated method stub
</span><span style="color: #008000">//</span><span style="color: #008000">1.创建字节数组输出流对象</span>
ByteArrayOutputStream baos=<span style="color: #0000ff">new</span><span style="color: #000000"> ByteArrayOutputStream();
</span><span style="color: #008000">//</span><span style="color: #008000">2.写入数据</span>
baos.write(12<span style="color: #000000">);
baos.write(</span>20<span style="color: #000000">);
baos.write(</span>18<span style="color: #000000">);
baos.write(</span>32<span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">3.获取输出流中的字节数据</span>
<span style="color: #0000ff">byte</span>[] data=<span style="color: #000000">baos.toByteArray();
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">byte</span><span style="color: #000000"> b : data) {
System.out.println(b);
}
}
}
使用内存流读取图片:
<span style="color: #0000ff">import<span style="color: #000000"> java.io.ByteArrayInputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.ByteArrayOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileInputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileNotFoundException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> ReadImg {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) <span style="color: #0000ff">throws</span><span style="color: #000000"> IOException {
</span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated method stub
</span><span style="color: #008000">//</span><span style="color: #008000">1.创建文件字节输入流</span>
FileInputStream fis=<span style="color: #0000ff">new</span> FileInputStream("E:xx.png"<span style="color: #000000">);
ByteArrayOutputStream baos</span>=<span style="color: #0000ff">new</span><span style="color: #000000"> ByteArrayOutputStream();
</span><span style="color: #0000ff">byte</span>[] buf=<span style="color: #0000ff">new</span> <span style="color: #0000ff">byte</span>[1024<span style="color: #000000">];
</span><span style="color: #008000">//</span><span style="color: #008000">2.读取数据</span>
<span style="color: #0000ff">int</span><span style="color: #000000"> len;
</span><span style="color: #0000ff">while</span>((len=fis.read(buf))!=-1<span style="color: #000000">) {
baos.write(buf,</span>0<span style="color: #000000">,len);
}
</span><span style="color: #008000">//</span><span style="color: #008000">3.获取图片数据</span>
<span style="color: #0000ff">byte</span>[] imgbyte=<span style="color: #000000">baos.toByteArray();
System.out.println(imgbyte.length);
</span><span style="color: #008000">//</span><span style="color: #008000">4.创建文件输出流</span>
FileOutputStream fos=<span style="color: #0000ff">new</span> FileOutputStream("E:xx1.png"<span style="color: #000000">);
ByteArrayInputStream bais</span>=<span style="color: #0000ff">new</span><span style="color: #000000"> ByteArrayInputStream(imgbyte);
</span><span style="color: #008000">//</span><span style="color: #008000">5.读取数组</span>
<span style="color: #0000ff">byte</span>[] buf1=<span style="color: #0000ff">new</span> <span style="color: #0000ff">byte</span>[1024<span style="color: #000000">];
</span><span style="color: #0000ff">int</span><span style="color: #000000"> len1;
</span><span style="color: #0000ff">while</span>((len1=bais.read(buf1))!=-1<span style="color: #000000">) {
fos.write(buf1,len1);
}
fis.close();
fos.close();
bais.close();
baos.close();
}
}
2.打印流
<span style="color: #0000ff">import<span style="color: #000000"> java.io.BufferedOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileNotFoundException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.PrintStream;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> PrintStreamDemo {
<span style="color: #008000">//<span style="color: #008000">打印流(字节)
<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void main(String[] args) <span style="color: #0000ff">throws<span style="color: #000000"> IOException {
<span style="color: #008000">//<span style="color: #008000"> TODO Auto-generated method stub
<span style="color: #008000">//<span style="color: #008000">PrintStream ps=new PrintStream("E:aaa.txt");
BufferedOutputStream bos=<span style="color: #0000ff">new BufferedOutputStream(<span style="color: #0000ff">new FileOutputStream("E:xx.txt"<span style="color: #000000">));
PrintStream ps=<span style="color: #0000ff">new PrintStream(bos,<span style="color: #0000ff">true<span style="color: #000000">);
ps.print("123456"<span style="color: #000000">);
ps.print(<span style="color: #0000ff">true<span style="color: #000000">);
ps.println("abcdef"<span style="color: #000000">);
ps.printf("%d",200<span style="color: #000000">);
ps.printf("%.2f",3.1415926<span style="color: #000000">);
ps.printf("%s","我爱生活"<span style="color: #000000">);
ps.printf("%x",256<span style="color: #000000">);
}
}
?
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileNotFoundException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileWriter;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.PrintWriter;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> PrintWriterDemo {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) <span style="color: #0000ff">throws</span><span style="color: #000000"> IOException {
</span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated method stub</span>
PrintWriter pw=<span style="color: #0000ff">new</span> PrintWriter(<span style="color: #0000ff">new</span> FileOutputStream("E:bbb.txt"<span style="color: #000000">));
pw.println(</span>"123"<span style="color: #000000">);
pw.close();
}
}
3.对象序列化与反序列化(对象流)
<span style="color: #0000ff">import<span style="color: #000000"> java.io.Serializable;
<span style="color: #0000ff">public <span style="color: #0000ff">class Student <span style="color: #0000ff">implements<span style="color: #000000"> Serializable {
<span style="color: #0000ff">private <span style="color: #0000ff">static <span style="color: #0000ff">final <span style="color: #0000ff">long serialVersionUID=123L;<span style="color: #008000">//<span style="color: #008000">序列化与反序列化的唯一标记
<span style="color: #0000ff">private <span style="color: #0000ff">int StuNo;<span style="color: #008000">//<span style="color: #008000">序列化和访问权限没有关系
<span style="color: #000000"> String name;
<span style="color: #008000">//<span style="color: #008000">transient int age;<span style="color: #008000">//<span style="color: #008000">transient 瞬时的,不能序列化瞬时的属性
<span style="color: #008000">//<span style="color: #008000">static String address="北京";<span style="color: #008000">//<span style="color: #008000">静态变量不能被序列化
<span style="color: #0000ff">public<span style="color: #000000"> Student() {
<span style="color: #0000ff">super<span style="color: #000000">();
<span style="color: #008000">//<span style="color: #008000"> TODO Auto-generated constructor stub
<span style="color: #000000"> }
</span><span style="color: #0000ff">public</span> Student(<span style="color: #0000ff">int</span><span style="color: #000000"> stuNo,String name) {
</span><span style="color: #0000ff">super</span><span style="color: #000000">();
StuNo </span>=<span style="color: #000000"> stuNo;
</span><span style="color: #0000ff">this</span>.name =<span style="color: #000000"> name;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span><span style="color: #000000"> getStuNo() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> StuNo;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setStuNo(<span style="color: #0000ff">int</span><span style="color: #000000"> stuNo) {
StuNo </span>=<span style="color: #000000"> stuNo;
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String getName() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> name;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> setName(String name) {
</span><span style="color: #0000ff">this</span>.name =<span style="color: #000000"> name;
}
}
使用对象类序列化和反序列化学生类:
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileInputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileNotFoundException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.ObjectInputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.ObjectOutputStream;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> SerializeDemo {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) <span style="color: #0000ff">throws</span><span style="color: #000000"> IOException,ClassNotFoundException {
</span><span style="color: #008000">//</span><span style="color: #008000">序列化过程:
</span><span style="color: #008000">//</span><span style="color: #008000">1.创建序列化对象</span>
Student stu=<span style="color: #0000ff">new</span> Student(1101,"小明"<span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">2.创建文件输出流</span>
FileOutputStream fos=<span style="color: #0000ff">new</span> FileOutputStream("E:receive.bin"<span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">3.创建对象流接入输出流</span>
ObjectOutputStream oos=<span style="color: #0000ff">new</span><span style="color: #000000"> ObjectOutputStream(fos);
</span><span style="color: #008000">//</span><span style="color: #008000">4.对象流输出序列化对象保存在文件中</span>
<span style="color: #000000"> oos.writeObject(stu);
oos.close();
<span style="color: #008000">//<span style="color: #008000">反序列化过程:
<span style="color: #008000">//<span style="color: #008000">1.创建对象流
FileInputStream fis=<span style="color: #0000ff">new FileInputStream("E:receive.bin"<span style="color: #000000">) ;
ObjectInputStream ois=<span style="color: #0000ff">new<span style="color: #000000"> ObjectInputStream(fis);
<span style="color: #008000">//<span style="color: #008000">2.反序列化
Student stu1=<span style="color: #000000">(Student)ois.readObject();
ois.close();
System.out.println("学号:"+<span style="color: #000000">stu1.getStuNo());
System.out.println("姓名:"+<span style="color: #000000">stu1.getName());
}
}
控制台输出信息(表明反序列化成功):
 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|