字符流与字节流(IO)

字符流与字节流

一、常用字符流:

写:

FileWriter:用于新建一个写入字符的文件

BufferedWriter:将文本写入字符输出流

例:BufferedWriter   s=new BufferedWriter(new  FileWriter(“abc.txt”));

读:

FileReader:用于新建一个读取字符的文件

BufferedReader:将输入流中读取文本

例:BufferedReader   s=new BufferedReader(new  FileReader(“abc.txt”));

二、常用字节流:

写:

FileOutputStream:用于创建文件输出流,用于将数据写入

BufferedOutputStream:该类实现缓冲的输出流。

读:

FileInputStream:从文件系统中的某个文件中获得输入字节

BufferedInputStream:该类实现缓冲的输入流。

例:

BufferedInputStream  s=newBufferedInputStream(new  FileInputStream(“abc.txt”));

三、转换流:

OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

        InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

键盘录入:

BufferedReader bufr = new BufferedReader(newInputStreamReader(System.in));

输出到控制台:

BufferedWriter bufw = new BufferedWriter(newOutputStreamWriter(System.out));String line = null;

//通过while的循环,不断将数据通过键盘录入,将转换成大写字母输出到控制台上,当

录入为over时,将结束循环。

while((line=bufr.readLine())!=null){

if("over".equals(line))

break;

bufw.write(line.toUpperCase());//将输入的字符转成大写字符输出

bufw.newLine();

bufw.flush();

}

bufw.close();

bufr.close();

转换流 = 字节流+编码表。

转换流的子类File = 字节流 + 默认编码表。

FileReader fr = newFileReader("a.txt");

InputStreamReader isr = newInputStreamReader(new FileInputStream("a.txt"),"gbk");

四、其他流:

ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。

ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。

因为这两个流对象都操作的数组,并没有使用系统资源。

所以,不用进行close关闭。

例:

import java.io.*;

class ByteArrayStream

{

public
static void
main(String[] args)

{

//数据源。

ByteArrayInputStream bis = newByteArrayInputStream("哈哈是计算机".getBytes());

//数据目的

ByteArrayOutputStream bos = new ByteArrayOutputStream();

int len = 0;

//从bis读取到的数据写到bos里面

while((len=bis.read())!=-1)

{

bos.write(len);

}

System.out.println(bos.size());

System.out.println(bos.toString());

}

}

管道流:java管道流的读写操作用于两个线程之间

PipedOutputStream、PipedInputStream 连接起来就是一个管道

管道输出流可以向管道写入数据,管道输入流可以从管道读取数据,

这种Decorator装饰 的设计模式 大大增强了java流的功能

可以在构造流的时候连接 管道输入输出流 也可以通过connect函数连接

PipedOutputStream

PipedInputStream

例:

package IO21;

import java.io.*;

class Read
implements
Runnable

{

private PipedInputStream
in;

Read(PipedInputStream in)

{

this.in = in;

}

public
void
run()

{

try

{

byte[] buf =
new byte[1024];

System.out.println("读取前。。没有数据阻塞");

int len =
in.read(buf);

System.out.println("读到数据。。阻塞结束");

String s= new String(buf,0,len);

System.out.println(s);

in.close();

}

catch (IOException e)

{

throw
new
RuntimeException("管道读取流失败");

}

}

}

//实现Runnable接口

class Write
implements
Runnable

{

//覆盖构造方法,传管道输出流对象

private PipedOutputStream
out;

Write(PipedOutputStream out)

{

this.out = out;

}

//复写run方法

public
void
run()

{

try

{

System.out.println("开始写入数据,等待6秒后。");

Thread.sleep(6000);

out.write("piped laila".getBytes());

out.close();

}

catch (Exception e)

{

throw
new
RuntimeException("管道输出流失败");

}

}

}

class  PipedStreamDemo

{

public
static void
main(String[] args)
throws IOException

{

//创建管道输出流对象,用于数据的写入

PipedInputStream in = new PipedInputStream();

//创建管道输入流对象,用于读取文本数据

PipedOutputStream out = new PipedOutputStream();

in.connect(out);//将管道输出流与输入流的连接,实现数据读写

//创建对象,开启线程

Read r = new Read(in);

Write w = new Write(out);

new Thread(r).start();

new Thread(w).start();

}

}

打印流:该流提供了打印的方法,可以将各种数据类型的数据都原样打印。

a:提供了更多的功能,比如打印方法。可以直接打印任意类型的数据。

b:它有一个自动刷新机制,创建该对象,指定参数,对于指定方法可以自动刷新。

c:它使用的本机默认的字符编码.

d:该流的print方法不抛出IOException。

字节打印流(PrintStream):

A、file对象:File

B、字符串路径:String

C、字节输出流:OutputStream

字符打印流(PrintWriter):

A、file对象:File

B、字符串路径:String

C、字节输出流:OutputStream

D、字符输出流:Writer

例:

package I020;

/*

打印流:

该流提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流:

PrintStream

构造函数可以接收的参数类型:

1,file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

字符打印流:

PrintWriter

构造函数可以接收的参数类型:

1,file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

4,字符输出流,Writer。

*/

import java.io.*;

class  PrintStreamDemo

{

public
static void
main(String[] args)
throws IOException

{

//键盘录入

BufferedReader bufr =

new BufferedReader(new InputStreamReader(System.in));

//将数据处理到a.txt文件中,并刷新

PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);

String line = null;

//将键盘录入的数据转化成大写,并实时写入a.txt文件中,遇到over时,结束键盘录入

while((line=bufr.readLine())!=null)

{

if("over".equals(line))

break;

out.println(line.toUpperCase());

}

out.close();

bufr.close();

}

}

时间: 2024-10-07 19:20:15

字符流与字节流(IO)的相关文章

黑马程序员—IO(一)流概述、字符流、字节流、流操作规律

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一节     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都在IO包中. 4)流按其操作数据的类型分为两种:字节流和字符流. 5)流按其流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象基流:Inp

黑马程序员——IO流概述、字符流、字节流、流操作规律(一)

第一节     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都在IO包中. 4)流按其操作数据的类型分为两种:字节流和字符流. 5)流按其流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象基流:InputStream和OutputStream 2)字符流的抽象基流:Reader和Writer 注:此四个

Java IO字符流与字节流

一.基本概念 流:从一端流向另一端,从源头到目的地. 始终与程序为中心,都是程序与文件|数组|网络连接|数据库进行操作. 二.IO流分类 1.流向: 输入流和输出流 2.数据: 字节流:二进制,可以处理文本文件,视频,音频等 . 字符流:文本文件,只能处理纯文本,全款为可见字符(.txt..html). 3.功能: 节点:包裹源头 处理:增强功能,提高性能. 三.字节流与字符流 1.字节流 输入流:InputStream int read(byte[] b) int read(byte[] b,

Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都在IO包中. 4)流按操作数据分为两种:字节流和字符流. 5)流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象基流:InputStream和OutputStream 2)字符流的抽象基流:Reader和Writer 注:此四个类派生出来

java 核心编程——IO流之字符流和字节流相互转换(四)

1.为什么字符流和字节流需要转换? 这是因为有一些时候系统给你提供的只有字节流,比如说System.in标准输入流.就是字节流.你想从他那里得到用户在键盘上的输入,只能是以转换流将它转换为Reader以方便自己的程序读取输入.再比如说Socket里的getInputStream()很明显只给你提供字节流,你要不行直接用,就得给他套个InputStreamReader()用来读取.网络传输来的字符. 2.字节流和字符流怎么转换? 2.1.字节流转换为字符流:InputStreamReader 2.

黑马程序员——Java基础--IO流(一)---字符流和字节流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.IO流的介绍及体系 IO流用来处理设备之间的数据传输.java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中. 输入流和输出流相对于内存设备而言:将外设中的数据读取到内存中:输入.将内存中的数据写出到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,再对这个文字进行操作

字符流;字节流;带缓冲的输入输出流;以及用scanner读文件

概念: InputStream类是字节输入流的抽象类,是所有字节输入流的父类. OutputStream类是字节输入流的抽象类,是所有字节输出流的父类. In(可以理解为读)Out(可以理解为写) 一.字节流的读与写 FileInputStream类与FileOutStream类都是用来操作磁盘文件的. 1. FileInputStream(String name); 填String类型的路径名 FileInputStream(File file); 填入File对象 2. FileOutStr

理解Java中字符流与字节流的区别

1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流:能够向其写入一个字节序列的对象被称为输出流. 2. 字节流 Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据.Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输入字节流和输出字节流.InputStre

压缩字符流和字节流和全站压缩过滤器

1 public static void main(String[] args) throws Exception { 2 ByteArrayOutputStream bos = new ByteArrayOutputStream(); //字符流 3 OutputStreamWriter osw = new OutputStreamWriter(bos); 4 PrintWriter pw = new PrintWriter(osw); 5 pw.write("helloworld"