Java学习笔记——利用BufferedInputStream读数据

由于使用缓冲区可以选择读取缓冲区的起始位置,因此编码方式对于写入和读取都十分重要,根据所使用的编码方式来计算数据所占的字节数,从而实现正确的读写。具体实现代码如下:

import static java.lang.Math.ceil;
import static java.lang.Math.sqrt;
import static java.lang.Math.min;
import java.nio.file.StandardOpenOption.*;
import java.nio.file.*;
import java.nio.channels.*;
import java.nio.*;
import java.util.*;
import java.io.*;

public class PrimesToFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		Path file=Paths.get(System.getProperty("user.home")).resolve("Beginning Java Stuff").resolve("fibonnaci.bin");
		if(!Files.exists(file)){
			//检测文件是否存在
			System.out.println(file+" does not exist. Terminating program");
			System.exit(1);
			
		}
		final int count=8;
		ByteBuffer buf=ByteBuffer.allocate(8*count);//建立缓冲区,分配的单位为字节
		LongBuffer values=buf.asLongBuffer();//建立long型视图,long占8字节
		byte[] bytes=buf.array(); //将数据缓冲区内的字节数据转化为数组
		int totalRead=0;
		try{
			BufferedInputStream fileIn=new BufferedInputStream(Files.newInputStream(file)); //读取文件并存入缓冲流
			int numberRead=0;
			while(true){
				numberRead=fileIn.read(bytes,0,bytes.length);//依次读取数据
				System.out.println("The length is:"+numberRead);
				if(numberRead==-1){
					break;
				}
				totalRead+=numberRead/8;//
				for(int i=0;i<numberRead/8;++i){
					System.out.format("%12d",values.get());
				}
				System.out.println();
				values.flip();
			}
			System.out.format("%d values read.%n",totalRead);
		}catch(IOException e){
			System.err.println("Error writing file: "+file);
			e.printStackTrace();
		}
	}
}
读取结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值