Java二进制I/O基础与文本文件差异解析

版权申诉
0 下载量 59 浏览量 更新于2024-09-05 收藏 20KB PDF 举报
"Java语言程序设计基础篇课后题答案-Chapter18BinaryI_O.pdf" 在Java编程中,Chapter18主要探讨了二进制输入/输出(Binary I/O)这一关键概念。二进制I/O对于处理非文本数据如图片、音频或自定义数据结构至关重要。本章涉及的知识点主要包括以下几个方面: 1. **文本文件与二进制文件的区别**:虽然不严谨,但通常认为文本文件由字符序列组成,可由文本编辑器查看;而二进制文件由位序列构成,无法直接用文本编辑器打开。二者的本质区别在于处理数据的方式。 2. **Java I/O流的概念**:Java I/O系统通过流对象来实现数据的读写。输入流(InputStream)用于读取数据,输出流(OutputStream)用于写入数据。这些类提供了一系列方法来处理不同类型的I/O操作。 3. **二进制I/O与文本I/O的差异**:二进制I/O直接按原样读取和复制文件中的字节,不做任何转换。而文本I/O涉及到字符编码和解码,Java虚拟机(JVM)在写入字符时会将Unicode转换为特定文件编码,在读取时再从文件编码转换回Unicode。 4. **字符编码**:在内存中,字符使用Unicode表示;在文件中,字符则根据指定的编码方案进行存储。如果没有明确指定编码,系统会使用默认的编码方式。 5. **二进制数据表示**:文本文件中的值如0x410x420x43代表二进制数据,这些值对应于ASCII码中的字符序列,例如'ABC'。 6. **文本与二进制写入的区别**:写入ASCII文本文件时,数字"100"会以字符序列0x310x300x30的形式保存。而写入一个字节类型的数值,其二进制表示会有所不同,具体取决于数值大小和数据类型。 7. **字节流与字符流**:Java I/O提供两种流,字节流(如FileInputStream和FileOutputStream)处理原始字节,而字符流(如 FileReader和FileWriter)处理字符。字节流适用于所有类型的数据,而字符流适用于文本数据。 8. **缓冲区和转换流**:BufferedInputStream和BufferedOutputStream用于提高读写性能,通过缓存数据减少磁盘访问次数。而InputStreamReader和OutputStreamWriter则用于在字节流和字符流之间转换,允许指定编码。 9. **随机访问文件**:RandomAccessFile类允许对文件进行随机访问,不仅能够顺序读写,还可以跳转到文件的任意位置进行读写。 10. **文件复制示例**:使用FileInputStream和FileOutputStream可以实现文件的复制,通过循环读取源文件的字节并写入目标文件,可以完成二进制文件的完整复制。 理解并熟练掌握这些知识点是进行Java二进制I/O操作的基础,无论是开发涉及大量数据交换的应用还是进行网络攻防相关的编程,都有重要的应用价值。

import requests import os from bs4 import BeautifulSoup class book_spider(): def __init__(self,root_url): self.root_url=root_url self.book_list=[] #一级页面中获取的数据(二级页面地址)存放于此列表 self.chapter_list=[] #二级页面中获取的数据(三级页面地址和章节名)存放于此列表 def get_url(url): while True: try: res=requests.get(url) if res.status_code==200: res.encoding =res.apparent_encoding print("页面获取成功") return res.text else: print("页面返回异常",res.status_code) except: print("页面获取错误") def get_book_list(self.url): res = self.get_url(url) html = BeautifulSoup(res,"html.parser") a_list = html.find_all("a",{"class":"name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url+i for i in self.bbok_list] self.book_list.remove('http://10.1.88.252:7000/庆余年') print(book_list) def get_chapter_list(self,url): res = self.get_url(url) html = BeautifulSoup(res,"html.parser") a_list = html.find_all("a",{"class":"chapter"}) for a in a_list: self.chapter_list.append((a["href"],a.text.replace("\n",""))) def get_content(self.chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res,"html.parser") content = html.find("div",{"id":"content"}).text print(content) path = os.path.join(book_name,chapter[1]) with open(path,"w",encoding="utf8") as f: f.write(content) def main(): self.get_book_list(self.root_url) for book in self.book_list: self.get_chapter_liat(book) for chapter in chapter_list: self.get_content(chapter) book_s = book_spider("http://10.1.88.252:7000") book_s.main()这是一段爬虫代码,找出里面的错误并改正

2023-06-02 上传

帮我把一下代码设置一个合理请求头,并加入一个延时import requests import os from bs4 import BeautifulSoup class NovelDownloader: def __init__(self, root_url): self.root_url = root_url self.book_list = [] self.chapter_list = [] def get_url(self, url): while True: try: res = requests.get(url) if res.status_code == 200: print("页面获取成功!") return res.text else: print("页面返回异常!", res.status_code) except: print("页面获取错误!") def get_book_list(self): res = self.get_url(self.root_url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url + i for i in self.book_list] self.book_list.remove('http://www.biquge5200.cc/') def get_chapter_list(self, url): res = self.get_url(url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "chapter"}) for a in a_list: self.chapter_list.append((a["href"], a.text.replace("\n", ""))) def get_content(self, chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res, "html.parser") content = html.find("div", {"id": "content"}).text print(content) path = os.path.join(book_name, chapter[1]) with open(path, "w", encoding="utf8") as f: f.write(content) def main(self): self.get_book_list() for book in self.book_list: self.get_chapter_list(book) for chapter in self.chapter_list: self.get_content(chapter) if __name__ == '__main__': root_url = "http://www.biquge5200.cc/" nd = NovelDownloader(root_url) nd.main()

2023-06-02 上传