package com.jd.io;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;/** 转换流:InputStreamReader   OutputStreamReader* 1.以字符流的形式操作字节流* 2.指定字符集* 这里我使用转换流的方式实现*/
public class ConvertTest2 {public static void main(String[] args) {//操作一个网络流   下载百度的源代码    网络流也是一个字节流打开一个网络流(属于字节流))//我们在提高性能一下使用缓冲流try(BufferedReader is= new BufferedReader(new InputStreamReader(new  URL("http://www.baidu.com").openStream(),"utf-8"));BufferedWriter os=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("1.html")))){//读取String  line=null;while((line=is.readLine())!=null) {System.out.println(line);os.write(line);os.newLine();}os.flush();}catch(IOException e) {System.out.println("操作异常");}}
}

转换流的作用就是将我们的字节流转换成字符流

字节流是可以处理一切内容的,包括图片,音频,视频,也包括纯文本,在很多系统和框架的底层返回给我们的都是字节流(有时候我们使用字节流处理并不方便,这就是我们为什么要转换字符流的原因)

System.in,System.out都是字节流,因为我们键盘输入还是输出的都是字符串,所以我们可以对它进行转换。

在我们的底层,如果是纯文本的话就涉及到一个东西是字符集。将字节转成字符叫做解码(在解码的过程中就涉及到字符集的问题,如果工程的字符集跟源头(文件)的字符集不统一就会出现乱码),所以这个时候我们最好可以指定字符集

从字节流到字符流的转换

只要我们看见Reader都建议加一个BufferedReader

将写入的字符编码为字节

讲一下什么使用字节流,什么时候使用字符流

其实底层都是字节,我们使用字符是为了处理一些文本和字符串提高性能
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列

字节流和字符流的使用:

https://www.cnblogs.com/DONGb/p/7844123.html

Java IO流中提供了两种用于将字节流转换为字符流的转换流。其中InputStreamReader用于将字节输入流转换为字符输入流,其中OutputStreamWriter用于将字节输出流转换为字符输出流。使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集

https://blog.csdn.net/qq_44149554/article/details/89541771?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

讲一下缓存流和转换流的结合,看见Reader我们就可以使用缓存流提高性能

使用转换流实现字节到字符的转换以及输入和输出

  • 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
  • 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

讲一下什么是节点流

字符流和字节流就可以叫做节点流

出现乱码的原因有两种:

1.字节数不够出现乱码

2.字符集不统一出现乱码

html文件的下载,如何使用字节流,如何使用转换流

在java中文件的传输其实就是靠流来实现的,网络流也是属于字节流,所以我们先使用字节流

我觉得写的时候应该是全部都写出来才写的,具体debug才知道,我这里就不弄了

为什么读取的时候乱码,写入的时候不乱码

忽然一下子自己就懂了,总之写入的时候只要讲字符集设置的和源头的文件一致就可以了

https://www.zhihu.com/video/1229171897016815616

c语言将数据写入文件后乱码_html文件的下载,如何使用字节流,如何使用转换流...相关推荐

  1. oracle 控制文件 scn,重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里...

    重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里 这个问题要看具体的情况,比如: 1. 数据库是shutdown immediate,也就是说数据库是一致的状态,重建控制文件后,SCN 以d ...

  2. 关于SVN添加无用的受控文件后,取消文件受控的方法

    问题:关于SVN添加无用的受控文件后,取消文件受控的方法 答案:右键需要去掉受控的文件,选择TortoiseSVN->Unversion and add to ignore list->去 ...

  3. VS2010 打包生成exe文件后 运行安装文件出现 TODO:文件说明已停止工作并已关闭

    一.VS2010 打包生成exe文件后  运行安装文件出现  TODO:<文件说明>已停止工作并已关闭 TODO: <文件说明>已停止工作 原因: 打包的时候在文件系统中建立了 ...

  4. C语言实现数据写入文件

    向文件中写入数据(C语言) 在分析数据时,首先要解决数据的保存问题,c中提供了相应的函数来实现将数据写入指定文件中的功能 fopen函数 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有 ...

  5. c语言将数据写入mysql中_用C语言操作MySQL数据库

    先看结构体 ---------------------------------------------- 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql ...

  6. ie浏览器打开aspx文件乱码_html文件的中文乱码问题与在浏览器中的显示问题

    我今天的页面也是出现了乱码,所以在网上查找了相关的问题,看来一下,这个方法挺不错的,我也试验了呢,我用的editp编辑器,在文档-文件编码-更改文件编码-选择自己所需要的编码就行 在网页中,中文乱码的 ...

  7. Scratch二次开发:关于增加的扩展导出sb3文件后,导入文件失败问题

    这里写自定义目录标题 问题描述: 解决方案: 问题描述: 无论是通过vm的extension增加扩展,还是通过scratch-blocks编译增加扩展块,直接保存作品文件后,再次导入作品文件失败. 解 ...

  8. c语言将数据写入文件后乱码_c语言,数据能写入文件,但是从文件读取数据的时候,出现了乱码,如下代码,求解答...

    //写入数据代码#include#defineSIZE2typedefstructstu1//学生信息表{charname[10];intnum;intage;charaddr[15];}studen ...

  9. c语言将数据写入文件后乱码_C语言 文件写入输出。文件载入后输出是乱码,纠结啊!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void save1() //将工具的基本信息保存至文件:"工具基本信息.file" { FILE*fp; //定义fp是一个指向FI ...

最新文章

  1. 附录3:Pandas实例记录
  2. 机器学习(MACHINE LEARNING)种群竞争模型
  3. 五天带你学完《计算机网络》·第二天·数据链路层
  4. 数据类型介绍和表的创建
  5. 安全左移理念,鹅厂 DevSecOps 如何实践?
  6. 禅道启动mysql报错_测试工具之在Linux服务器上部署禅道Bug管理系统
  7. LOOP WITH CONTROL 用法
  8. 如何使用Linux重置Windows密码
  9. [导入]用ASP.Net(C#)连接Oracle数据库的方法
  10. python输出字符_python输出字符
  11. 仓储系统流程图_有效的仓储物流管理的6个重要提示
  12. UnityGI5:实时 GI 与光探代理体
  13. dom4j 基本操作
  14. ifix组态软件研究控制按钮权限
  15. Java代理模式——CGLIB动态代理
  16. oracle 启用job,Oracle job启动与关闭
  17. impala添加kerberos认证
  18. 双硬盘安装双系统,配置显卡驱动,安装cuda,pycuda
  19. matlab 画qq图,科学网—[转载]R语言绘制QQ图 - 刘朋的博文
  20. 计算机无误的英语,“开电脑”的英语正确表示是哪个?说错了就尴尬

热门文章

  1. Pandas知识点-索引和切片操作
  2. 漫步最优化一——引言
  3. 漫步数学分析番外五(上)
  4. [机器学习-原理篇]支持向量机(SVM)深入理解
  5. 【C++、Matlab】VS2013 C++读写.mat文件
  6. 改善深层神经网络:超参数调整、正则化以及优化——2.1 Mini-batch梯度下降
  7. 【线性查询之间存在相关性误差】差分隐私系统学习记录(七)
  8. Linux学习笔记5
  9. Oracle维护数据完整性——约束
  10. 分解质因数(优中再优化)