------------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! --------------
1. 流分类
按操作数据分为两种:字节流与字符流 。
(1)字节流两个基类:InputStream OutputStream
(1)字符流两个基类:Reader Writer
由这四个类派生出来的子类名称都是 以其父类名作为子类名的后缀。
按流向分为:输入流,输出流。
2. 输入流和输出流相对于内存设备而言 .
将外设中的数据读取到内存中 : 输入
将内存的数写入到外设中:输出。
3. 字符流
字符流中的常见类
(1) FileReader 此类用于从硬盘上的数据文件读取数据。
(2) FileWriter 此类用于把数据写到硬盘上的数据文件上。
(3) BufferedReader 可以从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
(4)BufferedWriter 可以将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
字符流的演示代码如下:
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
// 创建一个读取流对象和文件相关联。
FileReader fr = new FileReader("buf.txt");
// 为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null)
{
System.out.print(line);
}
bufr.close();
}
}
4. 字节流
字节流中常见的类
(1) FileInputStream 此类从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。适合用于读取诸如图像数据之类的原始字节流。
(2) FileOutputStream 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream (或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
(3) BufferedInputStream 此类为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。 mark 操作记录输入流中的某个点, reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。
(4) BufferedOutputStream 该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
字节流的演示代码如下:
import java.io.*;
class FileStream
{
public static void main(String[] args) throws IOException
{
readFile_3();
}
public static void readFile_3()throws IOException
{
FileInputStream fis = new FileInputStream("fos.txt");
// int num = fis.available();
byte[] buf = new byte[fis.available()];// 定义一个刚刚好的缓冲区。不用在循环了。
fis.read(buf);
System.out.println(new String(buf));
fis.close();
}
public static void readFile_2()throws IOException
{
FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1)
{
System.out.println(new String(buf,0,len));
}
fis.close();
}
public static void readFile_1()throws IOException
{
FileInputStream fis = new FileInputStream("fos.txt");
int ch = 0;
while((ch=fis.read())!=-1)
{
System.out.println((char)ch);
}
fis.close();
}
public static void writeFile()throws IOException
{
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("abcde".getBytes());
fos.close();
}
}
5. 转换流:
(1) InputStreamReader : 字节到字符的桥梁。解码。
(2) OutputStreamWriter : 字符到字节的桥梁。编码。
转换流示例代码如下:
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args) throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
6. 装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。找到其参数的共同类型。通过多态的形式。可以提高扩展性。
class MyBufferReader extends MyReader
{
private MyReader r;
MyBufferReader(MyReader r)
{
}
}
------------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! --------------