繁体   English   中英

Java NIO中BufferedWriter的替代方案是什么

[英]What's the alternative for BufferedWriter in Java NIO

如果我们使用Java Standard IO api逐行读取文件并进行操作,然后将其写入新文件。 我们将使用类似这样的代码段。

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
String str;
while ((str = br.readLine()) != null) {
    //... code for manipulation of str
    bw.write(str);
    bw.newLine();
}

我需要对要写入的文件进行读锁,因此我继续在Java NIO包中使用FileChannel。 为了实现相同。 我编写的代码段如下。

int blocksize = 32 * 1024;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inputFilePath), inputCharset));
FileOutputStream fos = new FileOutputStream(outputFilePath);
FileChannel outputFileChannel = fos.getChannel();
outputFileChannel.lock();
ByteBuffer buffer = ByteBuffer.allocate(blocksize);
while((line=br.readLine())!=null){
    buffer.put(line.getBytes(StandardCharsets.UTF_8));
    buffer.put("\n".getBytes(StandardCharsets.UTF_8));
    buffer.flip();
    outputFileChannel.write(buffer);
    buffer.clear();
}
br.close();
outputFileChannel.close();
fos.close(); 

现在我的问题是这会在多大程度上影响性能,是我们每次调用filechannel.write (我的意思是它的行为就像filereader.write一样)还是在内部使用缓冲区时,Filechannel是否会写入文件。

我将使用BufferedWriter和FileChannel.lock()。

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
FileLock lock = fis.getChannel().lock();

BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
String str;
while ((str = br.readLine()) != null) {
    //... code for manipulation of str
    bw.write(str);
    bw.newLine();
}
lock.release();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM