`
kofsky
  • 浏览: 197765 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

字节流读应对应字节流写

Web 
阅读更多

   要求:从网页上读取数据,然后写入本地文件。  

   这段代码是通过一个url地址读取网页中的文本数据。没有写入文件,直接返回文本字符串。

public static String getPageContent(String url)
        
...{
            String content 
= "";
            HttpWebRequest request 
= (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
            Stream stream 
= response.GetResponseStream();
            StreamReader sr 
= new StreamReader(stream);

            content 
= sr.ReadToEnd();

            sr.Close();
            response.Close();

            
return content;
        }

   确实能够读取网页。

  但我想读取一幅图像,也通过这种方式读取数据,结果调试了半天,一直不得行。后来发现是StreamReader 的问题。通过StreamReader 是以特定的编码读取字符,而我写文件是以字节流的方式写的。那这样,我的操作过程就是,先以字符方式读取,字符转化成字节,然后以字符流方式写。过程繁多,而且字符/字节间的转化涉及编码问题,几乎就是错误的做法。

  应该以字节流(BinaryReader)读,以字节流写。如下:

/**//**
         * 根据一个url地址下载web资源
         
*/

        
public static void downloadWebResource(String url, String filename)
        
...{
            HttpWebRequest request 
= (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
            Stream readStream 
= response.GetResponseStream();
            BinaryReader streamReader 
= new BinaryReader(readStream);

            FileInfo file 
= new FileInfo(filename);
            FileStream saveStream 
= file.Create();

            
while(true)
            
...{
                
int bufferLen=1024;
                
byte[] buffer = new byte[bufferLen];
                
int rdLen = streamReader.Read(buffer, 0, bufferLen);
                saveStream.Write(buffer, 
0, rdLen);
                saveStream.Flush();
                
if (rdLen == 0 )
                    
break;
            }

            saveStream.Close();
            streamReader.Close();
            response.Close();
        }

ok,顺利通过测试。 

分享到:
评论

相关推荐

    IO流——文件操作字节流常用方法一览

    这里是根据提供的File类对象创建对应的文件操作输入字节流。 FileInputStream(String pathName); 这里是根据提供的String类型文件路径,创建对应的文件操作输入字节流。 都会抛出异常: ...

    Java之IO流学习总结

    3.字节流的输入与输出的对应 图中蓝色的为主要的对应部分,红色的部分就是不对应部分。紫色的虚线部分代表这些流一般要搭配使用。从上面的图中可以看出Java IO 中的字节流是极其对称的。“存在及合理”我们看看...

    C#使用FileStream复制一个任意文件

    我的理解是,硬盘上存在一个字节流,内存里也有一个字节流,它们是对应的。程序运行时,我们只能对内存里的字节流直接操作,在它被关闭的时候,它的内容自动写入硬盘上的相应字节流。 复制一个文件的基本思路是:...

    Redis数据库-Java语言实现

    客户端、服务端收发字节流 服务端解析字节流,执行命令 五大数据类型的命令、通用命令支持 RDB、AOF持久化机制支持 异常检查机制 校验字节流 枚举类封装处理对应的异常信息 客户端与服务端长连接、双向通信 客户端 ...

    缓冲流——字节缓冲流

    所有的缓冲流都没有任何的读取,写入文件能力,这里都需要对应的输入流和输出流来提供对应的能力。 在创建缓冲流流对象时,需要传入对应的输入流对象和输出流对象。 底层就是提供了一个默认大小的缓冲数组,用于...

    wav格式解析

    wav 头信息解析 详细介绍wav文件的解析,头信息对应的位置代表的信息

    java编写智能合约-简单的用java代码实现智能合约.pdf

    } } /* * @Author ZDLS * @Description 根据流的⽅式,读⼊jar中的class对象对应的字节流 * @Date 下午 16:44 2021/1/26 0026 * @Param * @return */ private byte [] generateByteOfClass(JarInputStream ...

    java中的IO操作总结(一)

     字节流 其中,字符流有两个抽象类:Writer Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率 解压密码 www.jiangyea.com

    变长记录文件存取类库(数据结构大作业)

    文件中的每条记录可以有不同的大小,是任意长度的字节流。每条记录对应一个序号(记录号)和一个字串型标识。记录的记录号和标识均可用作对记录的定位和引用。这种文件的每个记录实质上相当于一个子文件,可以存储...

    VHDL设计SDH的源程序

    SDH是现代光纤通信中广泛应用的数据传输格式,其基本帧结构为方块状,每帧270X9字节,帧频为8KHz,以字节为基本传输单位,与字节流对应的时钟频率为19.44MHz(270*9*8K=19.44M),其传输顺序为从左到右,从上到下,...

    IO流之字符流(下)

    字符流 = 字节流 + 解码过程 字节组合操作 == 》 对应当前环境编码集的一个字符,如果字符找不到,该数据无效,需要被删除 1.1.2 文件操作输入字符流 FileReader constructor 构造方法 FileReader(File file) 根据...

    变长记录文件存取类库的设计和实现及应用_员工工作交流系统

    C++编写,控制台。 利用独自开发的类库设计应用程序,功能强大。... 详细设计和操作请参看设计报告。 若要了解类库的设计和使用,请参看本人的另一个资源(变长记录文件存取类库及测试)。支持原创,支持开源

    gif图片文件编解码

    参考网上的资料写的gif编解码。... 编码流转换成字节流是按位从低到高的,window是小端模式(低字节在低地址),字节内低位在右边。 24位dib转换成8位dib时使用的八叉树算法 图片拉伸时参考的网上的双线性插值算法。

    Java基础知识点.html

    类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...

    IO流之缓冲流

    所有的缓冲流都没有任何的读取写入文件的能力,都需要对应的输入流和输出流来提供对应的能力 在创建缓冲流对象时,需要传入对应的输入流对象和输出流对象 底层就是提供了一个默认大小的缓冲数组用于提高效率 1.2 ...

    使用Spire.Doc实现word转html.zip

    如标题所示,Spire.Doc支持获取Word文档中段落(Paragraph)和文本范围(TextRange)的样式,...当然,我们也可以根据标题样式获取对应的文本。在此基础还可以识别表格,图片,总之非常强大工具,里面有我附带的例子。

    C语言程序设计标准教程

     ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码: 00110101 00110110 00110111 00111000  ↓ ↓ ↓ ↓ 十进制码: 5 6 7 ...

    Java面试技术面知识扩展包第一弹

    在Java技术面试中,面试官通常会测试您在以下领域的知识和技能: 1. 基础知识:面试官可能会问您Java...6. 输入输出(IO):面试官可能会问及Java IO的知识,如字节流和字符流的区别、文件读写、序列化和反序列化等。

    (Java)文件异或加密(循环指定长度pi为异或常量)

    获取文件的流,对每个字节进行异或操作,异或的常量为根据key算出的pi的小数部分的指定长度的某个值(根据key的位数,如果key为三位数,那么就去10^3个pi的小数位数为异或常量的取值),再根据key来决定从这个数组...

    DCI format - DCI.zip

    输入字节流,解出对应字段的内容 如0-0中。 Nrb_dl_bwp 48 payload bitstring 11010100101110101111111 频域资源分配 11 11010100101 时域资源分配" 4 1101 VRB-to-PRB映射 1 0 调制编码方案 5 11111 TB扩展 2 11

Global site tag (gtag.js) - Google Analytics