网站建设的可行性报告研究,学校网站建设公司,全响应网站制作,wordpress后台 登录读取文件就是对代码与算法上进行了一些细节上的修改了#xff0c;下文我们来看一段java读取文件性能优化的例子。在执行IO时#xff0c;Java的InputStream被广泛使用#xff0c;比如DataInputStream.readInt等等。事实上#xff0c;这些高度封装的接口奇慢无比。我有一个项…读取文件就是对代码与算法上进行了一些细节上的修改了下文我们来看一段java读取文件性能优化的例子。在执行IO时Java的InputStream被广泛使用比如DataInputStream.readInt等等。事实上这些高度封装的接口奇慢无比。我有一个项目启动时需要读取90MB左右的词典文件用DataInputStream耗时3秒以上换用java.nio包直接操作内存字节可以加速到300ms左右整整提速10倍当然前提是你熟悉位运算。java.nio中提供了两类 FileChannel 和 ByteBuffer来将文件映射到内存其中FileChannel表示文件通道ByteBuffer是一个缓冲区。具体步骤①从FileInputStream、FileOutputStream以及RandomAccessFile对象获取文件通道②将文件内存映射到ByteBuffer③通过byteBuffer.array()接口得到一个byte数组④直接操作字节示例代码 代码如下复制代码 FileInputStream fis new FileInputStream(path);// 1.从FileInputStream对象获取文件通道FileChannelFileChannel channel fis.getChannel();int fileSize (int) channel.size();// 2.从通道读取文件内容ByteBuffer byteBuffer ByteBuffer.allocate(fileSize);// channel.read(ByteBuffer) 方法就类似于 inputstream.read(byte)// 每次read都将读取 allocate 个字节到ByteBufferchannel.read(byteBuffer);// 注意先调用flip方法反转Buffer,再从Buffer读取数据byteBuffer.flip();// 可以将当前Buffer包含的字节数组全部读取出来byte[] bytes byteBuffer.array();byteBuffer.clear();// 关闭通道和文件流channel.close();fis.close();int index 0;size Utility.bytesHighFirstToInt(bytes, index);index 4;其中如果你当初使用了DataOutputStream.writeInt来保存文件的话那么在读取的时候就要注意了。writeInt写入四个字节其中高位在前低位在后所以将byte数组转为int的时候需要倒过来转换 代码如下复制代码/*** 字节数组和整型的转换高位在前适用于读取writeInt的数据** param bytes 字节数组* return 整型*/public static int bytesHighFirstToInt(byte[] bytes, int start){int num bytes[start 3] 0xFF;num | ((bytes[start 2] 8) 0xFF00);num | ((bytes[start 1] 16) 0xFF0000);num | ((bytes[start] 24) 0xFF000000);return num;}改变buffer的大小也可以起到使用 代码如下复制代码public static void copy1(File src, File dest) throws Exception {FileInputStream fileInputStream null;FileOutputStream fileOutputStream null;try {fileInputStream new FileInputStream(src);fileOutputStream new FileOutputStream(dest);byte[] buffer new byte[8096];int length -1;while((length fileInputStream.read(buffer)) ! -1) {fileOutputStream.write(buffer, 0, length);//一次性将缓冲区的所有数据都写出去fileOutputStream.flush();}} finally {if(fileInputStream ! null) {fileInputStream.close();}if(fileOutputStream ! null) {fileOutputStream.close();}}}