`

java IO流学习笔记一

    博客分类:
  • java
阅读更多

IO 两大主流 16位和8位



16位对应writer和reader

fileWriter /fileReader 对文件进行读写

示例代码:

FileWriter out=new FileWriter("test.txt");
out.write("张三");
out.close();


char[] buf=new char[1024];

FileReader in=new FileReader("test.txt");
int len=in.read(buf);
System.out.println(new String(buf,0,len));

StringWriter/StringReader 对内存里的位置进行读写

示例代码如下:

try {
throw new Exception("test");
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
System.out.println(e.getMessage());
// System.out.println(sw.toString());
}

PipedWriter/PipedReader 两个线程间进行通讯

 

 

 

8位对应InputStream和OutputStream

 

fileInputStream/FileOutputStream 对文件进行读写

示例代码:

public static void main(String[] args) throws Exception
{
FileOutputStream out=new FileOutputStream("test.txt");
out.write("张三".getBytes());

byte[] buf=new byte[1024];
File f=new File("test.txt");
FileInputStream in=new FileInputStream(f);
int len=in.read(buf);
System.out.println(new String(buf,0,len));
in.close();






}

 

ByteArrayInputStream/ByteArrayOutputStream 对字节数组进行读写

示例代码:

public static void main(String[] args)
{
String tmp="abc";
byte[] src=tmp.getBytes();
ByteArrayInputStream input=new ByteArrayInputStream(src);
ByteArrayOutputStream output=new ByteArrayOutputStream();
transform(input,output);
byte[] result=output.toByteArray();
System.out.println(new String(result));

transform(System.in,System.out);

}
public static void transform(InputStream in,OutputStream out)
{
int ch=0;
try
{
while((ch=in.read())!=-1)
{
int upperCh=(int)(Character.toUpperCase((char)ch));
out.write(upperCh);
}
}catch(Exception e)
{
e.printStackTrace();
}
}

 

PipedInputStream/PipOutputStream 线程间通讯使用

示例代码:

class Sender extends Thread {
private PipedOutputStream out = new PipedOutputStream();


public PipedOutputStream getOutputStream() {
return out;
}


public void run() {
String strInfo = new String("hello,receiver!");
try {
out.write(strInfo.getBytes());
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}


}


class Receiver extends Thread {
private PipedInputStream in = new PipedInputStream();


public PipedInputStream getInputStream() {
return in;
}


public void run() {
String strInfo = new String("hello,receiver!");
byte[] buf = new byte[1024];


try {
int len = in.read(buf);
System.out.println("the following message comes from sender:\n" + new String(buf, 0, len));
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}


}


class PipedStreamTest {
public static void main(String[] args) throws Exception {
Sender t1 = new Sender();
Receiver t2 = new Receiver();


PipedOutputStream out = t1.getOutputStream();
PipedInputStream in = t2.getInputStream();
out.connect(in);


t1.start();
t2.start();
}


}


注:数据流中不存在字符串的IO操作,那样要用reader和writer
二者的桥梁在inputStreamReader/outputStreamWriter
bufferedWriter/bufferedReader

bufferedInputStream/bufferedOutputStream

示例代码:

public static void main(String[] args) throws Exception
{
FileOutputStream fos=new FileOutputStream("count.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);
DataOutputStream dos=new DataOutputStream(bos);
dos.writeUTF("ab中国");
dos.writeBytes("ab中国");
dos.writeChars("ab中国");
dos.close();


FileInputStream fis=new FileInputStream("count.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
DataInputStream dis=new DataInputStream(bis);
System.out.println(dis.readUTF());
byte[] buf=new byte[1024];
int len=dis.read(buf);
System.out.println(new String(buf,0,len));
fis.close();

}

 

来提高IO访问速度的



高级IO操作

信道IO java.nio.channels



java流的处理上分为
字符流 处理单元为2个字节的unicode字符,操作字符\字符数组\字符串
Reader
CharArrayReader()
StringArrayReader()
FileReader()



Writer
CharArrayWriter()
StringWriter()
FileWriter()
PipedWriter()








字节流 处理一个字节,操作字节和字节数组
inputStream
ByteArrayInputStream() 创建一个字节数组输入流
StringBufferInputStream() 把一个String 作为一个inputStream
FileInputStream() 把一个文件作为一个inputStream,实现文件读取
PipInputStream() 创建一个输入流管道
SequenceInputStream() 序列输入流,把多个inputStream合并


outputStream
ByteArrayOutputStream() 把信息存入内存中的一个缓冲区
FileOutputStream ()
PipedOutputStream() 通讯管道的发送端



两种不同导向的stream之间的转换
把一个字节为导向的stream转换为一个以字符为导向的stream





java IO的一般使用原则
1 按数据来源(去向)分类
是文件: fileInputStream, fileOutputStream, fileReader, fileWriter
是byte[]: byteArrayInputStream/byteArrayOutputStream
是char[]: charArrayReader/charArrayWriter
是String stringBufferInputStream/StringBufferOutputStream
StringReader/StringWriter
网络数据流: inputStream/outputStream reader writer




2 按是否格式化输出分:
printStream /printWriter

3 按是否要缓冲分:
bufferedInputStream/bufferedOutputStream
bufferedReader/burreredWriter

4 按数据格式分

分享到:
评论

相关推荐

    java IO流学习笔记

    java IO流学习笔记

    java io流学习笔记1

    NULL 博文链接:https://lpf.iteye.com/blog/1471932

    Java IO学习笔记+代码

    Java IO学习笔记+代码,全面介绍IO中的方法、类,很适合初学者

    io流的学习笔记

    io流学习笔记,主要适合入门的人士学习及观看

    java学习笔记1(java io/nio)

    java学习笔记1(java io/nio)设计模式

    java IO流详解

    文档是关于JAVA常用IO流的学习笔记,可以用于参考,学习。

    java IO流学习笔记——(1)文件字节流

    java IO流学习笔记——(1) IO流总述 • 输入流:数据源到程序(InputStream、Reader读进来) • 输出流:程序到目的地(OutputStream、Writer写出去) 流分类 : • 节点流:可以直接从数据源或目的地读写数据 • 处理...

    javaIO流.xmind

    自己总结的java中IO流的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    java李兴华学习笔记之Java_IO操作

    收集的java李兴华老师的课件笔记。感觉还不错,适合回顾和新手补习。

    IO笔记.zip关于javaIO流部分的详细笔记

    这是关于java各个IO流,从节点流到装饰缓冲流的一系列笔记纲要,帮助更好的理解和学习java的IO流

    java IO流学习笔记——(2)文件字符流&字节数组流

    java IO流学习笔记——(2)文件字符流&字节数组流 文件字符流FileReader&FileWriter FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 部分...

    IO流学习总结

    本文档为本人学习 java IO流期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!

    java IO流学习笔记——(3)字节缓冲流&字符缓冲流&转换流&数据流

    目录java IO流学习笔记——(3)字节缓冲流&字符缓冲流&转换流&数据流字节缓冲流 —BufferedInputStream&BufferedOutputStream字符缓冲流—BufferedReader&BufferedWriter转换流—InputStreamReader&...

    java-IO流与异常机制学习笔记

    自己总结,知识点全面,包含了,IO流,异常机制等学习笔记 含有代码实例可供参考,需要mybase打开 持续更新,需要的自行下载 附上本人写的学习博客 https://blog.csdn.net/qq_35577787/article/details/105088073

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    java学习笔记

    java学习笔记大全:java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 java se课程介绍 java面向对象编程(基础) java...

    Java学习笔记之IO流

    详细介绍了IO的用法,基本实现原理,并介绍了序列化与反序列化的实现方法。谢谢

Global site tag (gtag.js) - Google Analytics