java学习第18天总结

Day18
1.IO流: InputStream(输入)在文件读取到内存 OutputStream(输出) 在内存中输入到文件内

io流的分类:
1.一个是按照流向来进行划分: 输入流与输出流InputStream(输入) OutputStream(输出)
2.一个是按照功能进行划分:字符流(Writer)与字节流(Reader)
字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流 : 字符流只能操作纯字符数据,比较方便。

     使用流的时候的注意事项:  1. 所有导入 java.io下的jar包  
                             2. 需要注意异常
                             3. 释放资源,关闭资源 

2.输出流: OutputStream 是把内存的数据写入到硬盘里
OutputStream 它是一个抽象类,不能被实例化

           公有的方法:public void close()  关闭与释放资源 
                         public void flush()  强制性刷新了缓存区
                         public void write(byte[] b) 将字节数据中的数据写入到输出流里
                         public void write(byte[] b,int off,int len) 将字节数组的数据指定区间写入到输出流里
                         (off从什么地方开始写 len写入的长度 作用:可以控制写的指定的内容)
                         public abstract void write(int b) 将字节写入到输出流里
            子类: ByteArrayOutputStream  字节输出流
                   FileOutputStream   文件输出流(重点)
                   FilterOutputStream  过滤器输出流
                   ObjectOutputStream  对象输出流
                   PipedOutputStream  管道输出流
                   FileOutputStream:一般用于向文件写入数据

              构造方法:public FileOutputStream(File file)
                       public FileOutputStream(String name)
                       public FileOutputStream(File file, boolean append)
                      第一个参数是  写入的位置   默认是true
                      第二个参数是  是否覆盖     如果传递的参数是true 表示不覆盖

                         1.实例化 FileOutputStream
                         2.如果这个文件不存在,会默认去常见这这个文件
                         3.把FileOutputStream 执行需要写入数据的位置(文件)

向文件写入数据的一个原理: java–>jvm —>OS(操作系统)–>调用操作系统的写入方法

  写数据的方法:1.  public void write(int b)
  写数据的一个基本的步骤:1.实例化 FileOutputStream
                          2.调用其写的方法
                          3.关闭资源  如下:
    //第一步需要实例化这个对象
  OutputStream os = new FileOutputStream("1.txt");
 // 调用其写的方法
os.write(97);
 //关闭资源
os.close();

如何写多个字节(String s=“今天学习了io流的输入方法”)?

OutputStream os = new FileOutputStream(“5.txt”);
String s=“今天学习了io流的输入方法”;
byte [] b =s.getBytes();// 写字符串 ==>需要把字符串转换成字节数组getBytes())
os.write(b);
os.close();

byte[] b =new byte[]{-28,-72,-128,67,68};
//b[] 如果是负数:使用的是gbk 编码格式:两个负数表示一个中文
//b[] 如果是 utf-8 表示三个负数是一个中文

3.输入流 InputStream(也是一个抽象类)是从硬盘把数据读取到内存

       子类:FileInputStream   文件输入流对象
       给子类提供了很多公有的方法: 
             public int available() 返回的是当前输入流里的字节数
             public void close()   关闭资源的方法
             public abstract int read()  一个一个字节读取
             public int read(byte[] b)   把数据读取到字节数组里
             public int read(byte[] b,int off,int len)  可以读取指定区间的数据


     构造方法: public FileInputStream(File file)
               public FileInputStream(String name)

     构造:  做了两件事 1.创建 FileInputStream 2. 把FileInputStream 对象执行你要读取的文件的位置

     读取的原理: java--->jvm ==>0S(操作系统)--->调用操作系统的读取的方法()

     输入流的一个大致步骤1.创建一个FileInputStream()
                         2.调用 read()方法来进行读取
                         3.关闭资源
        如下:
  InputStream  is   = new FileInputStream("5.txt");
	byte []  b = new  byte[1024];
// 确定了循环使用while循环
int   length =-1;
while ((length=is.read(b)) !=-1){
	System.out.println((char) length);
}
is.close();
  • 如果文件里的内容是0-127对应的ascall码表

  • 如果是其它的对应是系统默认的 编码(GBK)

  • 返回值读取的是具体的数据

  • 如果is.read() 返回值是-1表示读取完毕

            public int read(int a)   把数据读取到字节数组里    public int read(byte[] b)
    
               1.  第一个读取一个字节,第二个一次性读取多个字节到缓存区。
               2.  返回值  第一个返回是具体的数据,第二个是读取有效字节的个数。
               3.  第二个的效率会更高(尽量使用后者读取)。
    

4.使用bufferInputStream 与 bufferOutputStream进行读写操作 如下:

BufferedInputStream bis= new BufferedInputStream(new FileInputStream(“6.txt”));
BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream(“d:\小姐姐.txt”));
int leng =-1;
while ((leng= bis.read()) !=-1){
bos.write(leng);
}
flush();与close();
flush() 一个是讲缓存区里的数据刷到文件中 调用 flush() 方法之后流对象还可以使用
close() 关闭资源 调用 close() 方法之后 流对象不能使用
close() 方法内部调用了flush()

总结:今天学习了IO流的一部分内容,主要有1.IO流 2.输出流: OutputStream 3.输入流 InputStream 4.使用bufferInputStream 与 bufferOutputStream进行读写操作。IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,用于操作流的类都在IO包中。 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的,而字符流只能操作纯字符数据。今天学的者是对于字节流的,对数据处理不是那么方便。而今天要记的单词有:1.Stream流 2.flush刷新 3.Piped管道 4.available可获得的

上一篇:1月26日


下一篇:K-D Tree简单介绍