黑马程序员_Java_IO流(二)

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!----------------------

字符流的缓冲区: 
 
                   缓冲区的出现提高了对流的操作效率。
 
                   原理:其实就是将数组进行封装。
 
                   对应的对象:

BufferedWriter:特有方法: 
 
                    newLine():跨平台的换行符。
 
BufferedReader: 特有方法: 
 
                   readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返 
                   回。当读到末尾时,返回 null。
 
 
在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,所以在建立缓冲区对象时,要先有流对象存在。
 
其实缓冲内部就是在使用流对象的方法, 只不过加入了数组对数据进行了临时存储。

 为了提高操作数据的效率。

 

代码上的体现: 
           写入缓冲区对象: 


                //建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造函数。 
 
                  BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt")); 
 
                  bufw.write("abce");//将数据写入到了缓冲区。 
 
                  bufw.flush();//对缓冲区的数据进行刷新。将数据刷到目的地中。 
 
                  bufw.close();//关闭缓冲区,其实关闭的是被包装在内部的流对象.读取缓冲区对象:
 
                BufferedReader bufr = new BufferedReader(new FileReader("buf.txt")); 
 
                String line = null; 
 
                //按照行的形式取出数据。取出的每一个行数据不包含回车符。 
 
                 while((line=bufr.readLine())!=null) 
 
                 { 
                      System.out.println(line); 
                 } 
                 bufr.close();

 

readLine():方法的原理: 
 
                   其实缓冲区中的该方法,用的还是与缓冲区关联的流对象的 read 方法。 
                   只不过,每一次读到一个字符,先不进行具体操作,先进行临时存储。 
                   当读取到回车标记时,将临时容器中存储的数据一次性返回。

 

字节流: 
 
               抽象基类:InputStream,OutputStream。 
 
              字节流可以操作任何数据。 
 
              注意:字符流使用的数组是字符数组。char [] chs 
              字节流使用的数组是字节数组。byte [] bt 
 
               FileOutputStream fos = new FileOutputStream("a.txt"); 
 
               fos.write("abcde");//直接将数据写入到了目的地。 
 
               fos.close();//只关闭资源。 
 
                FileInputStream fis = new FileInputStream("a.txt"); 
 
               //fis.available();//获取关联的文件的字节数。 
 
               //如果文件体积不是很大,可以这样操作。 
 
                byte[] buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。 
 
               //但是这有一个弊端,就是文件过大,大小超出 jvm 的内容空间时,会内存溢出。  
 
                 fis.read(buf); 
               System.out.println(new String(buf));

 

示例:用字节缓冲流复制一张图片,代码如下:

                BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("1.jpg")); 
 
                BufferedOutputStream bufos =  new BufferedOutputStream(new FileOutptStream("2.jpg")); 
 
                int by = 0; 
 
                 while((by=bufis.read())!=-1) 
                 { 
                      bufos.write(by); 
                 } 
 
                 bufos.close(); 
                 bufis.close();

 

转换流:
      特点:
 
                1,是字节流和字符流之间的桥梁。
 
                2,该流对象中可以对读取到的字节数据进行指定编码表的编码转换。 
 
    什么时候使用呢? 
                1,当字节和字符之间有转换动作时。
 
                2,流操作的数据需要进行编码表的指定时。 
 
具体的对象体现:
 
                1,InputStreamReader:字节到字符的桥梁。
 
                2,OutputStreamWriter:字符到字节的桥梁。

                这两个流对象是字符流体系中的成员。 
 
               那么它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

 

可以和流相关联的集合对象 Properties. 
 
Map 
        |--Hashtable 
                  |--Properties
 
Properties:该集合不需要泛型,因为该集合中的键值对都是 String 类型。 
 
         1,存入键值对:setProperty(key,value);
 
         2,获取指定键对应的值:value getProperty(key);
 
          3,获取集合中所有键元素: 
 
                      Enumeration  propertyNames(); 
 
在 jdk1.6 版本给该类提供一个新的方法。 
 
                Set<String> stringPropertyNames();
 
4,列出该集合中的所有键值对,可以通过参数打印流指定列出到的目的地。 
 
                list(PrintStream); 
 
                list(PrintWriter); 
 
                例:list(System.out):将集合中的键值对打印到控制台。 
 
                list(new PrintStream("prop.txt")):将集合中的键值对存储到 prop.txt 文件中。
 
5,可以将流中的规则数据加载进行集合,并称为键值对。 
 
               load(InputStream): 
 
               jdk1.6 版本。提供了新的方法。 
 
                          load(Reader): 
 
注意:流中的数据要是 "键=值" 的规则数据。
 
6,可以将集合中的数据进行指定目的的存储。 
 
               store(OutputStram,String comment)方法。 
 
              jdk1.6 版本。提供了新的方法。 
 
                        store(Writer ,String comment): 
 
使用该方法存储时,会带着当时存储的时间。

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!----------------------

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值