java字符流类_整理JAVA中的IO流(字符流和字节流两个⼤
类)
java中的io流分为两类,字符和字节:
OutputStream和InputStream字节流的⽗类,抽象。OutputStream有两个提供了实现的接⼝closable和flushable。
Writer和Reader字符流的⽗类,抽象。
实际上在流的操作中,底层与⽂件进⾏读写的都是字节流,因为即使是字符流的对象,其最终实现读写的也是⽤的字节流。
操作⽂件的字节⼦类FileOutputStream和FileInputStream。
记住,这⾥⾯写出和读⼊的都是字节。
class useByteStream
{
/**
* 使⽤⽂件输出字节流
*
*/
public static void testFileOutputStream()
{
OutputStream out = null;
try
{
File f = new File(".\\log\\");
//out = new FileOutputStream(f);
out = new FileOutputStream(f,true); //追加⽅式记录到⽂件
String str = "Hello World!!!";
byte b[] = Bytes();
out.write(b);
out.close();
}
catch(FileNotFoundException e)
{
}
catch(IOException e)
{
}
* 使⽤⽂件输⼊字节流
*/
public static void testFileInputStream() {
InputStream out = null;
try
{
File f = new File(".\\log\\");
out = new FileInputStream(f);
String str = "Hello World!!!";
byte b[] = new byte[1000];
int len = ad(b);
System.out.println(new String(b,0, len) ); out.close();
}
catch(FileNotFoundException e)
{
}
catch(IOException e)
{
}
}
};
操作⽂件的字符⼦类FileWriter和FileReader class useCharStream
{
/**
* 使⽤⽂件字符输出流
*/
public static void testFileWriter()
{
Writer w = null;
File f = new File(".\\log\\"); w = new FileWriter(f,true); //追加⽅式w.write("hello world\r\n");
w.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
/**
* 使⽤⽂件字符输⼊流
*/
public static void testFileReader()
{
Reader w = null;
try
{
File f = new File(".\\log\\"); w = new FileReader(f);
char c[] = new char[1024];
System.out.println(c);
w.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
catch(IOException e)
{
e.printStackTrace();
}
}
pipedinputstream
};
两个转换类,OutputStreamWriter,负责将写⼊字符流转为字节流,InputStreamReader,负责读取字节流转为字符流。FileWriter的直接⽗类是OutputStreamWriter,并⾮Writer。
FileReader的直接⽗类是InputStreamReader,并⾮Reader。
因此,最终写⼊⽂件和从⽂件读出的都是字节流。
以上都是基于⽂件流操作,接下来是基于内存操作流,如果只是写业务代码应该很少会⽤到。
内存操作流
ByteArrayInputStream\ByteArrayOutputStream。
class useMemoryStream
{
/**
* 使⽤内存操作流,字节
*/
public static void testByteArray()
{
String str = "Hello world";
ByteArrayInputStream bis = null;
ByteArrayOutputStream bos = null;
bis = new Bytes());
bos = new ByteArrayOutputStream();
int temp =0;
while((ad())!=-1)
{
char c = (char)temp;
bos.UpperCase(c));
}
String newStr = String();
try
bis.close();
bos.close();
}
catch(IOException e)
{
e.printStackTrace();
}
System.out.println(newStr);
}
};
另外,管道流可以实现两个线程之间的通信。
PipedInputStream 和 PipedOutputStream。
PipedOutputStream通过connect⽅法与PipedInputStream建⽴连接,后续PipedOutputStream.write的内容,就会ad⽅法读取
class Send implements Runnable
{
private PipedOutputStream pos = null;
public Send()
{
this.pos = new PipedOutputStream();
}
public void run()
{
String str = "Hello world!!!";
try
{
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
e.printStackTrace();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。