Java NIO 中 BufferedWriter 的替代方案是什么
What's the alternative for BufferedWriter in Java NIO
如果我们使用 Java 标准 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 时 Filechannel 是否会写入文件(我的意思是它的行为是否完全像 filereader.write) 还是会在内部使用缓冲区。
我会使用 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();
如果我们使用 Java 标准 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 时 Filechannel 是否会写入文件(我的意思是它的行为是否完全像 filereader.write) 还是会在内部使用缓冲区。
我会使用 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();