InputStream   这个抽象类是表示输入字节流的所有类的超类。 
              需要定义InputStream子类的应用InputStream必须始终提供一种返回输入的下一个字节的方法。 
常用函数:
     1.read(byte[] b, int off, int len)  从输入流读取最多 len字节的数据到一个字节数组。 
     2.close()  关闭此输入流并释放与流相关联的任何系统资源。 
     3.available() 获取数据字节长度,返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 

子类:
1.FileInputStream:FilterInputStream包含一些其他输入流,它用作其基本的数据源,可能会沿途转换数据或提供附加功能。
                   FilterInputStream本身简单地覆盖了所有InputStream的方法, InputStream版本将所有请求传递给包含的输入流
   构造函数:
    1.FileInputStream(File file) 
    2.FileInputStream(String name) 

2.ByteArrayInputStream:byte数组转inputStream流
   构造函数:ByteArrayInputStream(byte[] buf) 
   
3.ObjectInputStream :反序列化先前使用ObjectOutputStream编写的原始数据和对象。 
   构造函数:ObjectInputStream(InputStream in)  创建从指定的InputStream读取的ObjectInputStream。 
   独有的方法:1.readClassDescriptor()  从序列化流读取类描述符。 
                    2.readObject()   从ObjectInputStream读取一个对象。

4:PipedInputStream:管道流
   构造函数:PipedInputStream(PipedOutputStream src) 
   独有方法:connect(PipedOutputStream src) 

5.SequenceInputStream:合并流
   1.构造函数:SequenceInputStream(InputStream s1, InputStream s2) 
   2.构造函数:SequenceInputStream(Enumeration<? extends InputStream> e) 
 
6.FilterInputStream: 包含一些其他输入流,它用作其基本的数据源,可能会沿途转换数据或提供附加功能
构造方法:FilterInputStream(InputStream in) 
 子类:
    7.PushbackInputStream 
     构造函数:PushbackInputStream(InputStream in) 创建一个 PushbackInputStream并保存其参数,输入流 in供以后使用。 
     独有方法:unread(byte[] b) 将一个字节数组复制回推回缓冲区的前端。

    8.DataInputStream: 数据输入流允许应用程序以独立于机器的方式从底层输入流读取原始Java数据类型
     构造函数:DataInputStream(InputStream in)     创建使用指定的底层InputStream的DataInputStream。
     独有的方法:
        1.read(byte[] b)  从包含的输入流中读取一些字节数,并将它们存储到缓冲区数组 b 。
        2.readFully(byte[] b, int off, int len) 读取某一段数据。多线程上传下载可以使用这个方法。
        
    9.BufferedInputStream:使用缓冲技术来包装inputStream提高读取效率。
     构造函数:BufferedInputStream(InputStream in) 

//FileInputStream 使用实例
    public String FileInputStreamTest(String path){
        if(!new File(path).exists()){
            return null;
        }
        FileInputStream fileInputStream=null;
        try {
            byte[] data=new byte[1024];
            StringBuilder stringBuilder=new StringBuilder();
            fileInputStream=new FileInputStream(path);
            int len=0;
            while ((len=fileInputStream.read(data))!=-1){
                stringBuilder.append(new String(data,0,len));
            }
            return stringBuilder.toString();
        } catch (FileNotFoundException e) {
        }catch (IOException e){
        }
        return null;
    }

    //FileInputStream 使用实例
    public String FileInputStreamTest2(String path){
        if(!new File(path).exists()){
            return null;
        }
        BufferedInputStream bufferedInputStream=null;
        try {
            byte[] data=new byte[1024];
            StringBuilder stringBuilder=new StringBuilder();
            bufferedInputStream=new BufferedInputStream(new FileInputStream(path));
            int len=0;
            while ((len=bufferedInputStream.read(data))!=-1){
                stringBuilder.append(new String(data,0,len));
            }
            return stringBuilder.toString();
        } catch (FileNotFoundException e) {
        }catch (IOException e){
        }
        return null;
    }

   反序列化:

//反序列化
    public void objectInputStreamTest(String path) throws IOException, ClassNotFoundException {
        ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream(path));
        UHFInfo uhfInfo=(UHFInfo)objectInputStream.readObject();
    }

  键值内容的文件的读取方法:

    1.文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释。
    2.Properties 底层实现的就是 Hashtable

    

比较文件内容:
       #姓名 ,注释的内容,不会被解析
        name=张三
       #年龄 ,注释的内容,不会被解析
        age=12

     public void readFile(String configFile) throws FileNotFoundException {
        Properties prop=new Properties();
        FileInputStream fis=new FileInputStream(configFile);
        try {
            prop.load(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }
        for(int x=0;x<prop.size();x++){
            String value=prop.getProperty("key");
        }
        fis.close()
       }