加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java之IO流进阶篇:内存流,打印流,对象流

发布时间:2020-12-14 06:33:45 所属栏目:Java 来源:网络整理
导读:? 输入输出流子类众多,详情见下图: 用来操作内存 ByteArrayInputStream ? ? 内存到程序 不需要关闭 不使用内存资源,内存不够建议不用 ByteArrayOutputStream 程序到内存 不需要关闭 不使用内存资源,内存不够建议不用 内存输入流和内存输出流: 首先创建

?

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

  用来操作内存

  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"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;void</span> main(String[] args) <span style="color: #0000ff"&gt;throws</span><span style="color: #000000"&gt; IOException {
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;1.创建字节数组(要读取的数据)</span>
    <span style="color: #0000ff"&gt;byte</span>[] data= {10,15,50,33,12,22<span style="color: #000000"&gt;};
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;2.创建流</span>
    ByteArrayInputStream bais=<span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; ByteArrayInputStream(data);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;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"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; main(String[] args) {
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;1.创建字节数组输出流对象</span>
    ByteArrayOutputStream baos=<span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; ByteArrayOutputStream();
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;2.写入数据</span>
    baos.write(12<span style="color: #000000"&gt;);
    baos.write(</span>20<span style="color: #000000"&gt;);
    baos.write(</span>18<span style="color: #000000"&gt;);
    baos.write(</span>32<span style="color: #000000"&gt;);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;3.获取输出流中的字节数据</span>
    <span style="color: #0000ff"&gt;byte</span>[] data=<span style="color: #000000"&gt;baos.toByteArray();
    </span><span style="color: #0000ff"&gt;for</span> (<span style="color: #0000ff"&gt;byte</span><span style="color: #000000"&gt; 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"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;void</span> main(String[] args) <span style="color: #0000ff"&gt;throws</span><span style="color: #000000"&gt; IOException {
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;1.创建文件字节输入流</span>
    FileInputStream fis=<span style="color: #0000ff"&gt;new</span> FileInputStream("E:xx.png"<span style="color: #000000"&gt;);
    ByteArrayOutputStream baos</span>=<span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; ByteArrayOutputStream();
    </span><span style="color: #0000ff"&gt;byte</span>[] buf=<span style="color: #0000ff"&gt;new</span> <span style="color: #0000ff"&gt;byte</span>[1024<span style="color: #000000"&gt;];
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;2.读取数据</span>
    <span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; len;
    </span><span style="color: #0000ff"&gt;while</span>((len=fis.read(buf))!=-1<span style="color: #000000"&gt;) {
        baos.write(buf,</span>0<span style="color: #000000"&gt;,len);
    }
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;3.获取图片数据</span>
    <span style="color: #0000ff"&gt;byte</span>[] imgbyte=<span style="color: #000000"&gt;baos.toByteArray();
    System.out.println(imgbyte.length);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;4.创建文件输出流</span>
    FileOutputStream fos=<span style="color: #0000ff"&gt;new</span> FileOutputStream("E:xx1.png"<span style="color: #000000"&gt;);
    ByteArrayInputStream bais</span>=<span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; ByteArrayInputStream(imgbyte);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;5.读取数组</span>
    <span style="color: #0000ff"&gt;byte</span>[] buf1=<span style="color: #0000ff"&gt;new</span> <span style="color: #0000ff"&gt;byte</span>[1024<span style="color: #000000"&gt;];
    </span><span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; len1;
    </span><span style="color: #0000ff"&gt;while</span>((len1=bais.read(buf1))!=-1<span style="color: #000000"&gt;) {
        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"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;void</span> main(String[] args) <span style="color: #0000ff"&gt;throws</span><span style="color: #000000"&gt; IOException {
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub</span>
    PrintWriter pw=<span style="color: #0000ff"&gt;new</span> PrintWriter(<span style="color: #0000ff"&gt;new</span> FileOutputStream("E:bbb.txt"<span style="color: #000000"&gt;));
    pw.println(</span>"123"<span style="color: #000000"&gt;);
    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"&gt;public</span> Student(<span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; stuNo,String name) {
        </span><span style="color: #0000ff"&gt;super</span><span style="color: #000000"&gt;();
        StuNo </span>=<span style="color: #000000"&gt; stuNo;
        </span><span style="color: #0000ff"&gt;this</span>.name =<span style="color: #000000"&gt; name;
    }

    </span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; getStuNo() {
        </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; StuNo;
    }
    </span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;void</span> setStuNo(<span style="color: #0000ff"&gt;int</span><span style="color: #000000"&gt; stuNo) {
        StuNo </span>=<span style="color: #000000"&gt; stuNo;
    }
    </span><span style="color: #0000ff"&gt;public</span><span style="color: #000000"&gt; String getName() {
        </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; name;
    }
    </span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; setName(String name) {
        </span><span style="color: #0000ff"&gt;this</span>.name =<span style="color: #000000"&gt; 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"&gt;public</span> <span style="color: #0000ff"&gt;static</span> <span style="color: #0000ff"&gt;void</span> main(String[] args) <span style="color: #0000ff"&gt;throws</span><span style="color: #000000"&gt; IOException,ClassNotFoundException {
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;序列化过程:
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;1.创建序列化对象</span>
    Student stu=<span style="color: #0000ff"&gt;new</span> Student(1101,"小明"<span style="color: #000000"&gt;);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;2.创建文件输出流</span>
    FileOutputStream fos=<span style="color: #0000ff"&gt;new</span> FileOutputStream("E:receive.bin"<span style="color: #000000"&gt;);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;3.创建对象流接入输出流</span>
    ObjectOutputStream oos=<span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; ObjectOutputStream(fos);
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;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());
}
}

控制台输出信息(表明反序列化成功):

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读