「java降低io」Java降低安全性
今天给各位分享java降低io的知识,其中也会对Java降低安全性进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
关于java的io读写,缓冲区是如何提高读写效率的???
给你一个例子自己看看吧,加深理解
我们知道Java中一般的输入输出流类都是用单字节的读取方法来进行I/O操作的,也就是说每次只读写一个字节的数据,这种方法显然繁琐低效。如果从设备读取10M的文件,每次读取一个字节,完成操作将需要做10M/次I/O操作,I/O操作又是一件相当耗时的事情,无疑在很大程度上降低了系统的性能。
Java中专门提供提高I/O效率的缓冲类,这好比在数据读写时提供一个临时缓冲区,每次读取一个缓冲区大小的数据,将这数据库一次性写入目标设备。下图中分别为两种读取方式。
举个简单例子,在A地有10000本书需要搬到B地,如果一次搬1本,需要10000次。如果每次取1000本放到一个货车上,运到B地,需要10次完成。货车相当于是缓存区。同样道理,开设一个数据缓存区每次读取一数据块对于提高读取效率有显著提升。下面用一个具体代码示例来表示二者的性能差别。
Java代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestBuffer {
public static void main(String args[]) throws IOException {
String from = "f:/1.MP3";
System.out.println(from);
long startTime1 = System.currentTimeMillis();
TestBuffer.readWriteWithBuffer(from, "f:/2.MP3");
long endTime1 = System.currentTimeMillis();
System.out.println("使用缓冲区读取耗时:" + (endTime1 - startTime1) +"ms");
long startTime = System.currentTimeMillis();
TestBuffer.readWrite(from,"f:/3.MP3");
long endTime = System.currentTimeMillis();
System.out.println("直接读取耗时:" + (endTime - startTime) +"ms");
}
public static void readWrite(String from, String to) throws IOException {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(from);
out = new FileOutputStream(to);
while (true) {
int data = in.read();
if (data == -1) {
break;
}
out.write(data);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
/***************************************************************************
* 使用缓存区读写文件
* @param from
* @param to
* @throws IOException
*/
public static void readWriteWithBuffer(String from, String to)
throws IOException {
InputStream inBuffer = null;
OutputStream outBuffer = null;
try {
inBuffer = new BufferedInputStream(new FileInputStream(from));
outBuffer = new BufferedOutputStream(new FileOutputStream(to));
while (true) {
int data = inBuffer.read();
if (data == -1) {
break;
}
outBuffer.write(data);
}
} finally {
if (inBuffer != null) {
inBuffer.close();
}
if (outBuffer != null) {
outBuffer.close();
}
}
}
}
运行例子时会根据mp3文件的大小决定运行时间的长短,尽量使用小一点的mp3文件,运行时需耐心等待一段时间
java中关于io的问题
在 bw完成后,再去读取
BufferedReader br = new BufferedReader(
new FileReader("c:\\dat2.txt"));
这句你可以先设置File 可以设置在之前没影响,但是 BufferedReader 丢后面去 。
需要注意的是 : br.readLine()只是读取一行 ,在for循环里面建议你这样写:
S=br.readLine();
for(br.readLine()!=null){
S+=br.readLine();
}
System.out.println(S);
java IO问题
问题不大
关键是在String line=br.readLine();这行
它只能从文件中读一行,所以这行要用循环
但仅仅循环之后会出现个问题,就是File5.txt中只有File4.txt的最后一行内容
因为对File5.txt的操作不是追加,所以每往File5.txt写一行都会覆盖上一次写的东西所以,FileWriter fn2=new FileWriter("File5.txt", true);应该这样声明,让它追加
还有,应该先bw.close();然后再br.close(); !
import java.io.*;
import java.util.*;
import java.lang.String;
public class WordRev {
public static void main(String[] args){
StackString stack=new StackString();
try{
FileReader fn1=new FileReader("File4.txt");//把一个文件按String型入栈,使里面的每一个单词倒序输入到新文件中
BufferedReader br=new BufferedReader(fn1);
String line=null;
while((line=br.readLine())!=null) { // 读取每一行
String[] str=line.split("");
for(int i=0;istr.length;i++){
stack.push(str[i]);
}
FileWriter fn2=new FileWriter("File5.txt", true); // 将结果追加到文件的尾部,否则只能看见File4.txt的最后一行在这个文件中
BufferedWriter bw=new BufferedWriter(fn2);
while(!stack.isEmpty()){
bw.write(stack.pop()+"");
}
bw.newLine(); // 每打印一行之后换行
bw.close(); // 关闭流
}
br.close(); // 关闭流
}catch(IOException e){
e.printStackTrace();
}
}
}
split():
public class BaiDu {
public static void main(String[] args) {
String str = "a,b,c";
String[] x = str.split(",");
for (int i = 0; i x.length; i++) {
System.out.println(x[i]);
}
}
}
结果是:
a
b
c
没什么好说的,自己理解吧
不过有要注意的地方
"U.F.O".split("\\.");
如果要用"."来拆的话,需要用"\\."来转意
java IO的小问题
1输出字节数组b的内容;
2.清空输出流out中的内容;
3.关闭输出流out;(如果不关闭,out输出流一致存在,占用内存)
如何将java对象转成parquet文件
把文本文件 直接转 parquet
可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量
压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间
只读取需要的列,支持向量运算,能够获取更好的扫描性能
Parquet就是基于Google的Dremel系统的数据模型和算法实现的。核心思想是使用“record shredding and assembly algorithm”来表示复杂的嵌套数据类型,同时辅以按列的高效压缩和编码技术,实现降低存
与Avro之前新统计系统的日志都是用Avro做序列化和存储,鉴于Parquet的优势和对Avro的兼容,将HDFS上的存储格式改为Paruqet,并且只需做很小的改动就用原读取Avro的API读取Parquet,以提高近一个数量级。
Parquet文件尾部存储了文件的元数据信息和统计信息,自描述的,方便解析
关于java降低io和Java降低安全性的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。