IO(输出流)

首先说明:读取网络和读取磁盘没有什么区别,大部分都是字节的接收接收发送。

输出流抽象类类:OutputStream

常用方法:write(int b),write(byte[] data),write(byte[] data,int offset,int length),flush(),close()

它的具体子类可向具体子类写入数据,例如FileOutputStream向文件写入数据。

例如:

public class FileOutputStreamTest {
		 public static void main(String[] args) {
								
			try {
				File file = new File(save.txt);
				OutputStream fileInputStream = new FileOutputStream(file);   // 转换成字节
				byte[] strByte = abc.getBytes();
				
				fileInputStream.write(strByte);
				fileInputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}		
}
}

 

基本方法write(int b)是写入0~255的int类型,当写入一个int时,其实是每一次写一个无符号字节,在线缆上放的就是一个8位字节。

这里就会出现int到byte的强制转换:java就没有无符号数据类型,所以要写的时候用四个字节的有符号int代替一个字节的有符号byte,因为一个无符号的范围为0~255,如果你int表示这个范围没有任何问题,但是超过了(正和负)就需要转换了,此时就会发int的高位三个字节忽略了,另外有符号和无符号的唯一区别在于看你怎么解释他,一个有符号转换为无符号的方法就是  无符号(223) = 最大范围(256) + 有符号(-33)。

如果有多字节要发送,使用write(byte[] data),write(byte[] data,int offset,int length)比一次写一个字节的write(int b)要快。

例如:for(int =0 ; i < 10 ; i++){

out.write(i);

            }

改进为:

byte[] line = new byte[10]

for(int =0 ; i < 10 ; i++){

line[i] = (byte)i;

            }

out.write(line);

close()方法;当一个流操作结束时,需要用它关闭,然后会释放与这个流相关的所有资源,如果流来自一个网络连接,那么close后就会关闭这个连接。

常用做法:

OutputStream fileInputStream = null;					
			try {
				File file = new File("save.txt");
				fileInputStream = new FileOutputStream(file);
				//...
			} catch (IOException e) {
				e.printStackTrace();
			}finally{
				if(fileInputStream!=null){
					try{
						fileInputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}

有时成为释放模式。

也可以:

					
			try(OutputStream fileInputStream = new FileOutputStream(new File("save.txt"))){
				//...
			} catch (IOException e) {
				e.printStackTrace();
			}
java7中像这样不需要finally子句,并自动close()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值