System类对IO(input/output)的支持

本文介绍了编程中基本的输入输出方法以及错误处理机制,包括使用InputStream和PrintStream进行输入和输出操作,以及如何通过BufferedReader解决中文乱码问题;同时详细解释了使用System.out.println和System.err.println进行信息输出的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.publicstatic final InputStream in --> 键盘输入

2. publicstatic final PrintStream out --> 屏幕输出

3. publicstatic final PrintStream err --> 错误输出


1. 输入in代码:

InputStream is = System.in;
byte b[] = new byte[11];
System.out.println("请输入内容: ");
try {
	int len = is.read(b);
	System.out.println("输入内容为: ");
	System.out.println(new String(b, 0, len));
} catch (IOException e) {
	e.printStackTrace();
}

得出的结果如下图所示:

 

但是此代码有局限性, byte数组定义有限, 所以我们需要需该代码:

System.out.println("请输入内容: ");
int temp = 0;
StringBuffer buf = new StringBuffer();
try {
	while((temp=is.read())!=-1){
		char c = (char)temp;
		if(c=='\n'){
			break;
		}
		buf.append(c);	
	}
System.out.println("输入内容为: "+buf);
	} catch (IOException e) {
		e.printStackTrace();
	}	
}

该代码不够完善当输入中文时会出现乱码,这时需要通过BufferReader来实现.


2. 输出out代码:

OutputStream os = System.out;
try {
	os.write("Hello, pite!".getBytes());
	os.close();
} catch (IOException e) {
	e.printStackTrace();
}

相当于正常的输出代码: System.out.print("Hello, pite!");


3. 错误err输出:

try{
Integer.parseInt("Good morning");
	}catch(Exception e){
		System.out.println(e);
		System.err.println(e);
	}
}	

System.out.println(e);System.err.println(e);得出的结果是一样的,代码本身观察不出任何区别, 只有在eclipse下才会有红色的字段出现

.

从概念上来看, System.out.println(e);可以给用户看, 但相反System.err.println(e);是错误的输出, 最好不要给用户看到。






<think>好的,现在用户遇到了一个在格式化磁盘时出现的I/O错误问题。首先,我需要理解用户的问题。用户之前尝试使用mkfs.ext4格式化/dev/sda1分区,但在最后阶段卡住了,现在又遇到了“Input/output error”的错误。这可能意味着硬件问题或者操作过程中的错误。 首先,我需要回顾之前的对话历史。用户第一次询问时,格式化过程卡在“Writing superblocks and filesystem accounting information”阶段,我建议他们等待一段时间,检查进程状态,或者强制终止并修复文件系统。现在用户再次提问,这次错误明确指出了I/O错误,说明问题可能更严重,可能涉及硬件故障。 接下来,我需要分析可能的原因。I/O错误通常物理磁盘损坏、连接问题、文件系统损坏或内核问题有关。用户之前的分区是exFAT格式,可能在转换时出现兼容性问题,或者磁盘本身有坏道。此外,连接线松动或电源不稳定也可能导致写入错误。 然后,我需要考虑如何分步骤指导用户解决问题。首先应该检查硬件连接,确保数据线和电源线稳固。如果连接没问题,再检查磁盘健康状态,使用smartctl工具查看SMART数据。用户可能需要安装这个工具,所以需要给出安装命令。 之后,建议用户进行坏道检测,使用badblocks命令,但需要提醒这会破坏数据。如果发现坏道,可能需要更换磁盘。另外,检查dmesg日志以获取更多错误信息也很重要,这可以帮助确认问题根源。 如果硬件没有问题,可能需要尝试其他文件系统,比如ext3,或者使用低级格式化工具。此外,确保正确卸载设备,使用sync命令确保数据写入,以及检查分区是否正确对齐也可能有帮助。 最后,如果所有方法都失败,可能需要更换磁盘或联系专业数据恢复服务。需要提醒用户操作前备份数据,避免数据丢失。 在回答时,要结构清晰,分步骤说明,确保用户能按步骤排查问题。同时,注意使用中文,避免专业术语过多,必要时解释术语。还要注意用户可能对命令行工具不熟悉,给出具体的命令示例,并提醒风险,比如数据丢失的可能性。 需要确认用户是否在虚拟机或物理机中操作,因为虚拟机可能有不同的处理方式。但用户的问题中显示的是armbian系统,可能是在ARM设备上,比如树莓派等,所以需要考虑USB连接的稳定性,或者SD卡的健康状况。 总结,回答需要涵盖硬件检查、磁盘健康检测、错误日志分析、数据备份建议以及不同情况下的解决方案,同时保持条理清晰,易于理解和操作。</think>你遇到的`mkfs.ext4: Input/output error`错误表明磁盘出现物理或逻辑层面的写入故障。这是需要立即处理的关键问题,以下是完整解决方案: --- ### **故障诊断流程图** ```mermaid graph TD A[I/O错误] --> B{硬件检查} B --> |线缆松动| C[重新插拔数据线/电源线] B --> |接口氧化| D[更换USB/SATA接口] B --> |供电不足| E[改用独立供电硬盘盒] A --> F{磁盘健康检测} F --> |SMART异常| G[立即停用并更换磁盘] F --> |坏道过多| H[标记坏块并重建分区] A --> I{文件系统冲突} I --> |残留签名| J[用wipefs清除签名] I --> |分区表错误| K[重建GPT/MBR分区表] ``` --- ### **分步处理指南** #### **1. 紧急数据抢救(若磁盘有重要数据)** ```bash # 尝试只读模式挂载 sudo mount -o ro /dev/sda1 /mnt # 立即备份数据到其他存储设备 rsync -avh --progress /mnt/ /path/to/backup/ ``` #### **2. 硬件故障排查** ```bash # 查看磁盘SMART健康状态(需安装smartmontools) sudo apt install smartmontools sudo smartctl -a /dev/sda | grep -E 'Reallocated_Sector|Pending_Sector|Uncorrectable_Error' # 典型故障指标解释: # Reallocated_Sector > 0 : 存在已替换坏扇区 # Pending_Sector > 5 : 危险临界值 # Uncorrectable_Error >0 : 物理损坏 ``` #### **3. 强制清除磁盘签名** ```bash # 清除所有文件系统签名(危险操作!会完全擦除磁盘) sudo wipefs -a /dev/sda1 # 重建分区表(以GPT为例) sudo parted /dev/sda mklabel gpt sudo parted /dev/sda mkpart primary ext4 0% 100% ``` #### **4. 低级格式化修复** ```bash # 使用hdparm安全擦除(仅支持SSD) sudo hdparm --user-master u --security-set-pass pwd /dev/sda sudo hdparm --user-master u --security-erase pwd /dev/sda # 机械硬盘使用dd清零(将破坏所有数据!) sudo dd if=/dev/zero of=/dev/sda bs=1M status=progress ``` #### **5. 安全重建文件系统** ```bash # 带坏块检测的格式化(耗时较长) sudo mkfs.ext4 -c -c /dev/sda1 # 或使用更健壮的XFS文件系统 sudo mkfs.xfs -f /dev/sda1 ``` --- ### **技术原理说明** 当出现`Input/output error`时,Linux内核的块设备层(Linux Block Layer)会经历以下流程: 1. **SCSI层重试**:默认进行3次命令重试(可通过`/sys/block/sda/device/timeout`调整) 2. **IO调度器介入**:CFQ调度器可能自动降速到UDMA33模式 3. **驱动层反馈**:SATA AHCI控制器返回`CRB: Command Failed`状态 4. **最终错误上报**:通过bio_end_io()回调触发用户空间错误 --- ### **长期监控方案** ```bash # 实时监控磁盘错误计数 watch -n 10 "cat /sys/block/sda/stat /sys/block/sda/queue/hw_sector_size" # 配置自动邮件报警(需安装smartd) sudo nano /etc/smartd.conf # 添加以下内容: /dev/sda -a -m admin@example.com -M exec /usr/share/smartmontools/smartd-runner ``` 建议更换磁盘若检测到以下任一情况: - 每TB磁盘空间出现超过5个坏扇区 - 连续3次SMART自检失败 - 年平均故障率(AFR)超过1.5% 如果经过上述处理仍无法解决,极可能是物理损坏,请立即停止使用该磁盘。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值