`
kofsky
  • 浏览: 202856 次
  • 性别: 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各种操作文件,字符流、字节流等

    在Java IO中,主要有两种流的概念:字符流(Character Stream)和字节流(Byte Stream)。它们是处理数据的基本方式,适用于不同场景。 字符流主要处理基于字符的数据,如文本文件,它包括Reader和Writer两个抽象...

    java字节流和字符流

    与字节流相对应,字符流由`Reader`和`Writer`类组成。字符流处理的是Unicode字符,因此每个字符通常占用两个字节。`Reader`是所有字符输入流的基类,`Writer`是所有字符输出流的基类。它们提供读写字符的方法,如`...

    Java中的字节流文件读取教程(一)

    这些方法都是用于读取文件的字节流, skip方法用于跳过n个字节,close方法用于关闭流并释放对应的资源,mark和reset方法用于标志当前流读取位置和重置读取指针。 5. OutputStream和InputStream的相似性 ...

    字节流两种上传文件方法

    本文将深入探讨两种通过字节流上传文件的方法,一种是传统的文件上传方式,另一种是使用Struts2框架的字节流上传。这两种方法都有其特定的优势和适用场景,了解它们可以帮助开发者更好地选择和实现文件上传功能。 ...

    字节流生成word文档

    标题“字节流生成word文档”涉及到的是在Java编程中如何使用字节流技术来创建Microsoft Word(.doc或.docx)文件。字节流是Java IO中的一个重要概念,它用于处理二进制数据,如图像、音频、视频或者如Word文档这样的...

    Java字节流与字符流的介绍.pdf

    这两种流分别对应于数据传输的不同层面,字节流处理原始的八位字节数据,而字符流则处理Unicode字符集中的字符数据。 1. 字节流: 字节流主要用于处理二进制数据,如图片、音频、视频等非文本文件。Java中的字节流...

    字节数组流byte文件

    标签“vue2字节流byte[]文件”提示我们这个话题可能与Vue2框架结合使用字节数组流的方式有关。Vue是一个流行的前端JavaScript框架,它允许开发者以组件化的方式构建用户界面。在Vue2中,可能会遇到需要处理二进制...

    day09_字节流、字符流2

    Java中的字节流和字符流是处理数据输入输出的核心工具,它们主要用于读写文件、网络传输等场景。字节流处理的数据单位是字节,而字符流处理的是Unicode字符,适用于处理文本数据。 1. 字节输出流: 字节输出流(`...

    字节流,字符流,对象流,序列化,持久化

    在Java编程语言中,字节流、字符流、对象流和序列化是处理数据传输和存储的核心概念。这些概念在程序设计中占据了重要的地位,尤其是在处理输入/输出操作时。让我们逐一深入理解这些主题。 首先,字节流(Byte ...

    c# 获取字节流源码,并输出

    首先,字节流(Byte Stream)是计算机科学中用于表示数据序列的一种方式,通常用在读写文件、网络通信等涉及数据传输的场景。C#提供了多种类型的流类,如FileStream、MemoryStream和NetworkStream等,它们都是System...

    详解Java中字符流与字节流的区别

    Java中字符流与字节流的区别 Java中的流是对字节序列的抽象,可以想象有一个水管,不再是水,而是字节序列。流具有一个“流动的方向”,从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被...

    详解JAVA 字节流和字符流

    Java字节流和字符流是Java I/O流处理中非常基础且重要的概念,它们是用于文件读写操作的两大类型。Java字节流主要包括InputStream和OutputStream两个基类及其子类,字符流则包括Reader和Writer两个基类及其子类。 ...

    C#文件和字节流的转换方法

    在编程语言C#中,文件和字节流的转换是一个常见的操作。文件读写是应用程序与外部存储设备交换数据的重要手段之一。C#提供了丰富的类和方法来操作文件,其中FileStream类是用于读取和写入文件的常用类。在本文中,将...

    哈弗曼字节流编码译码器

    哈弗曼字节流编码译码器是一种基于哈弗曼编码的高效数据压缩工具,尤其适用于处理文本或二进制文件。哈弗曼编码是一种基于频率的变长编码方法,由克劳德·艾尔伍德·哈弗曼在1952年提出。它的核心思想是将出现频率高...

    易语言汇编读写字节集内存源码

    字节集是易语言中的一种数据类型,它可以用来存储任意字节序列,类似于其他语言中的字节数组或字节流。在内存操作中,字节集可以用来读取或写入内存块,从而实现数据的传输、修改或者分析。 在描述中提到的“@woxl...

    Java基础知识-day09【字节流、字符流】.pdf

    2.5 字节流的复制 文件复制是字节流应用的一个常见场景,可以通过BufferedInputStream和BufferedOutputStream进行高效的字节数据传输: ```java public class FileCopyExample { public static void main(String[]...

    Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

    在Python编程中,处理字节流、字符串以及十六进制数据转换是非常常见的任务,尤其是在进行网络通信、文件读写或串口操作时。本篇主要介绍如何使用`binascii`和`bytes`类型进行这些转换。 1. **字节流与字符串的转换...

    文件字节倒写实验 课程设计

    2. **文件字节流**:字节流是Java中处理数据的基本方式,它允许程序以8位字节为单位进行操作。在这个实验中,`FileInputStream`的`read()`方法用于从文件读取字节,而`FileOutputStream`的`write()`方法用于将字节...

    文件字节IO流例子代码.rar

    1. **字节流基础**:Java中的字节流分为输入流和输出流,分别用于数据的读取和写入。InputStream和OutputStream是所有字节输入流和输出流的基类,包括FileInputStream和FileOutputStream,它们专门用于文件操作。 2...

    Java_输入输出流及文件读写详解.docx

    字符流中的类基本上和字节流中的类对应,因此在开始学习 I/O 类时,可以从最基础的字节流开始学习。 InputStream 是所有字节输入流的父类,熟悉该类的使用将对使用字节输入流产生很大的帮助。InputStream 类中包含...

Global site tag (gtag.js) - Google Analytics