Java 有时写入文件块
我实现了一个下载管理器,它工作得很好,只是我注意到了一件事,有时线程在写入文件时会阻塞一段时间(50毫秒到10秒),我在Android(基于Linux)上运行这个程序,我猜在操作系统级别是否有某种需要刷新的缓冲区,我写的东西实际上是写到那个缓冲区,如果缓冲区满了,写东西需要等待Java 有时写入文件块,java,android,file,buffer,Java,Android,File,Buffer,我实现了一个下载管理器,它工作得很好,只是我注意到了一件事,有时线程在写入文件时会阻塞一段时间(50毫秒到10秒),我在Android(基于Linux)上运行这个程序,我猜在操作系统级别是否有某种需要刷新的缓冲区,我写的东西实际上是写到那个缓冲区,如果缓冲区满了,写东西需要等待 我的问题是可能导致阻塞的原因是什么?-我以以下方式完成了文件的写入和读取,从未遇到任何问题 例如: File f = new File("Path"); FileWriter fw = new FileWriter(f)
我的问题是可能导致阻塞的原因是什么?-我以以下方式完成了文件的写入和读取,从未遇到任何问题 例如:
File f = new File("Path");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
-您也可以试用Java中的
NIO
软件包。-我用以下方式完成了文件的写入和读取,从未遇到任何问题
例如:
File f = new File("Path");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
-您也可以试用Java中的
NIO
包。IO是众所周知的“阻塞”活动,因此您的问题应该是“当您的程序正忙着等待IO完成时,您应该做些什么”
采用一些众所周知的并发策略和基于事件的编程模式是一个良好的开端众所周知,IO是一种“阻塞”活动,因此您的问题应该是“当您的程序忙于等待IO完成时,您应该做些什么?”
采用一些众所周知的并发策略和基于事件的编程模式是一个良好的开端java.io.BufferedWriter是否也适用于Android?“…可能导致阻塞的原因是什么?”-如果看不到您的代码,就无法判断。写入flash是一项有时会遇到延迟的操作。Android是一个多任务系统,但许多实现在flash界面的实现细节上存在“一次一个”的瓶颈,因此在某些情况下可能会出现性能不佳的情况。这10秒显然令人惊讶,让人想知道手机上还可能运行着什么。java.io.BufferedWriter是否也适用于Android?“…可能导致阻塞的原因是什么?”-如果看不到您的代码,就无法判断。写入flash是一项有时会遇到延迟的操作。Android是一个多任务系统,但许多实现在flash界面的实现细节上存在“一次一个”的瓶颈,因此在某些情况下可能会出现性能不佳的情况。这10秒显然是令人惊讶的,让人想知道手机上可能还运行着什么。我发现问题的原因已经很久了,我在这里发表评论,以防其他人发现这有帮助。这确实是因为忙碌的IO。我使用多线程下载文件,如果目标文件太大,需要创建一个大的稀疏文件(使用seek),然后线程才能开始写入文件,因此
write
part块,我尝试将所有线程写入文件的开头,以避免一开始创建一个如此大的文件,我需要一个配置文件来保存每个线程的偏移量和写入的字节。现在一切都很完美。我发现问题的原因已经有一段时间了,我在这里发表评论,以防其他人发现这有帮助。这确实是因为忙碌的IO。我使用多线程下载文件,如果目标文件太大,需要创建一个大的稀疏文件(使用seek),然后线程才能开始写入文件,因此write
part块,我尝试将所有线程写入文件的开头,以避免一开始创建一个如此大的文件,我需要一个配置文件来保存每个线程的偏移量和写入的字节。现在一切都很好。