Java IO理解:字节流与字符流解析

下载需积分: 0 | PDF格式 | 591KB | 更新于2024-07-09 | 122 浏览量 | 0 下载量 举报
收藏
"这篇文档详细介绍了Java中的字节流、字符流以及属性集的概念和使用。文档内容主要包括IO流的基本概念、分类、流向以及相关的抽象类。" 在Java编程中,IO流(Input/Output Stream)是处理数据传输的核心部分,主要用于在不同设备之间进行数据的读取和写入。在描述的文档中,提到了以下几个关键知识点: 1. **IO流的概念**:IO流是一种模拟数据传输的方式,将数据看作是在不同设备之间流动。根据数据的流动方向,分为输入流(数据流入内存)和输出流(数据流出内存)。在Java中,这一概念主要体现在`java.io`包下的类和接口。 2. **IO流的分类**:基于数据流动方向,IO流分为输入流和输出流;依据处理数据的单位,又分为字节流(处理单个字节)和字符流(处理Unicode字符)。字节流的基类是`OutputStream`(输出)和`InputStream`(输入),而字符流的基类是`Writer`(输出)和`Reader`(输入)。 3. **字节流与字符流的区别**:字节流处理的是原始的二进制数据,适用于任何类型的数据,如图片、音频、视频等。字符流则基于字符编码,如UTF-8,主要处理文本数据。字符流内部通常会用到字节流,通过字符编码解码来实现字符的读写。 4. **抽象类的功能**:例如,`OutputStream`提供了`write()`方法用于写入字节数据,而`InputStream`有`read()`方法用于读取字节。`Writer`和`Reader`类同样提供相应的`write()`和`read()`方法,但处理的是字符数据。 5. **IO流的流向**:以内存为中心,从外部设备流向内存是输入,反之则是输出。例如,从磁盘文件读取数据到内存是输入流操作,从内存写入到文件是输出流操作。 6. **字节流的使用**:所有的文件数据,无论文本、图片还是视频,都以字节形式存储和传输。`OutputStream`类提供了关闭流的方法`close()`,以及写入字节数组的方法`write(byte[] b)`等。 7. **属性集**:虽然文档中没有深入介绍,属性集通常指的是在处理流时可能涉及到的一些附加信息,如文件的元数据或者编码信息。在实际编程中,例如处理XML或HTML文件时,可能需要使用到属性集来获取或设置特定的属性。 理解这些基本概念后,开发者能够有效地使用Java的IO流进行数据的读写操作,无论是处理文本文件还是二进制文件,都能够游刃有余。同时,对于高级特性如缓冲流、过滤流和对象序列化等,也有坚实的基础。

相关推荐

filetype

保留原本功能优化以下代码import pandas as pd import numpy as np import matplotlib.pyplot as plt # 1.读取并查看数据 bike_day = pd.read_csv("C:/Users/15020/Desktop/26.bike_day.csv") print(bike_day.head(5)) # 前5行 print(bike_day.tail(2)) #后2行 #2.处理数据并导出到文件 bike_day_user = bike_day[['instant','dteday','yr', 'casual', 'registered']].dropna() bike_day_user.to_csv('bike_day_user.txt', sep=' ',index=False, header=False) #3.读取数据并添加新列并导出到新文件 bike_day_user = pd.read_csv('bike_day_user.txt', sep=' ', header=None, names=['instant','dteday','yr', 'casual',"registered"]) bike_day_user['cnt'] = bike_day_user['casual'] + bike_day_user['registered'] bike_day_user.to_excel('bike_day_user_cnt.xlsx', index=False) #4.读取数据并进行统计 bike_day_user_cnt = pd.read_excel('bike_day_user_cnt.xlsx') print('cnt最大值:',bike_day_user_cnt['cnt'].max()) print('ent最小值:',bike_day_user_cnt['cnt'].min()) print('2011号cnt年平均值:',bike_day_user_cnt[bike_day_user_cnt['yr'] == 0]['cnt'].mean()) print('2012年cnt年平均值:',bike_day_user_cnt[bike_day_user_cnt['yr'] == 1]['cnt'].mean()) print('2011年月严始值:', bike_day_user_cnt[bike_day_user_cnt['yr'] == 0].groupby('mnth')['cnt'].mean()) print('2022年月平均值:', bike_day_user_cnt[bike_day_user_cnt['yr'] == 1].groupby('mnth')['cnt'].mean()) # 5.可视化并保存图像 fig, ax = plt.subplots() ax.barh(bike_day_user_cnt['mnth'], bike_day_user_cnt[bike_day_user_cnt['yr'] == 0].groupby('mnth')['cnt'].mean(), color='blue', label='2011') ax.barh(bike_day_user_cnt['mnth'], bike_day_user_cnt[bike_day_user_cnt['yr'] == 1].groupby('mnth')['cnt'].mean(), color='lightblue', label='2012') ax.set_yticks(np.arange(1,13)) ax.set_yticklabels(['Jan','Feb','Mar', 'Apr', 'May','Jun','Jul','Aug', 'sep', 'Oct','Nov','Dec']) ax.set_xlabel('Average number of shared bike users') ax.set_title('Monthly Average Number of Shared Bike Users in 2011-2012') ax.legend() fig.savefig('bike_day_user_cnt.png', dpi=300)

146 浏览量