我想设置一个用Java读取的阻塞文件。也就是说,有一个文件,当被FileInputStream包装并且任何read()方法被调用时,调用都会阻塞。我想不出一种独立于操作系统的简单方法-在类Unix操作系统上,我可以尝试使用mkfifo创建一个FIFO并从该文件中读取。一个可能的解决方法是只创建一个非常大的文件并从中读取-在我捕获堆栈之前读取不太可能完成,但它很丑陋且缓慢(实际上在缓存时读取速度仍然非常快)。相应的套接字read()案例设置起来很简单-自己创建一个套接字并从中读取,并且您可以进行确定性阻塞。目的是检查方法的堆栈以确定在这种情况下顶部的帧是什么。假设我有一个组件,它定期对所
在我的Windows7上,Files.newInputStream返回sun.nio.ch.ChannelInputStream。当我测试它与FileInputStream的性能时,我惊讶地发现FileInputStream更快。这个测试InputStreamin=newFileInputStream("test");longt0=System.currentTimeMillis();byte[]a=newbyte[16*1024];for(intn;(n=in.read(a))!=-1;){}System.out.println(System.currentTimeMillis()-
我有一个文件,开头包含一些纯文本,结尾是二进制内容。二进制内容的大小由我阅读的一些纯文本行决定。我正在使用BufferedReader来读取单独的行,但是它没有公开任何方法来引用读取字节数组。DataInputStream的readUTF不会一直读取到行尾,并且readLine方法已弃用。使用底层FileInputStream读取返回空字节数组。关于如何解决这个问题有什么建议吗?privateDOTDataInfoparseFile(InputStreamstream)throwsIOException{DOTDataInfoinfo=newDOTDataInfo();Buffered
我以前从未有过JavaIOAPI的亲body验,现在我真的很沮丧。我很难相信它有多么奇怪和复杂,以及完成一项简单的任务会有多么困难。我的任务:我有2个位置(起始字节,结束字节),pos1和pos2。我需要读取这两个字节之间的行(包括起始字节,不包括结束字节)并将它们用作UTF8String对象。例如,在大多数脚本语言中,它将是一个非常简单的1-2-3行(在Ruby中,但对于Python、Perl等,它基本上是相同的):f=File.open("file.txt").seek(pos1)whilef.posJavaIOAPI很快就会变得糟糕;)事实上,我看到了两种从常规本地文件读取行(以
FileInputStreamfstream=newFileInputStream(someFile.getPath());DataInputStreamin=newDataInputStream(fstream);如果我调用in.close(),它还会关闭fstream吗?我的代码给出如下GC异常:java.lang.OutOfMemoryError:超出GC开销限制 最佳答案 是的,DataInputStream.close()也会关闭您的FileInputStream。这是因为DataInputStream继承了FilterI
回应myanswertoafile-readingquestion,一位评论者表示FileInputStream.read(byte[])“不能保证填充缓冲区。”Filefile=/*...*/longlen=file.length();byte[]buffer=newbyte[(int)len];FileInputStreamin=newFileInputStream(file);in.read(buffer);(代码假定文件长度不超过2GB)除了IOException之外,还有什么可能导致read方法无法检索整个文件内容?编辑:代码的想法(以及我回答的问题的OP的目标)是一次性将整
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。ImprovethisquestionJava中的FileInputStream和BufferedInputStream有什么区别?
我有一个包含java序列化对象(如“Vector”)的文件。我已将此文件存储在Hadoop分布式文件系统(HDFS)上。现在我打算在maptask之一中读取这个文件(使用方法readObject)。我想FileInputStreamin=newFileInputStream("hdfs/path/to/file");不会工作,因为文件存储在HDFS上。所以我想到了使用org.apache.hadoop.fs.FileSystem类。但不幸的是,它没有任何返回FileInputStream的方法。它只有一个返回FSDataInputStream的方法,但我想要一个输入流,它可以从文件中读
如果我将文件中的字节读入byte[],我发现当数组大约为1MB时FileInputStream的性能比128KB更差。在我测试过的2个工作站上,它的速度几乎是128KB的两倍。这是为什么?importjava.io.*;publicclassReadFileInChuncks{publicstaticvoidmain(String[]args)throwsIOException{byte[]buffer1=newbyte[1024*128];byte[]buffer2=newbyte[1024*1024];Stringpath="some1gbbigfile";readFileInCh
FileInputStream:字节输入流读取注意:字节输入流,到-1就是文件内容的末尾 //FileInputStream字节输入流读取publicclass FileInputStreamDemo5 { publicstaticvoid main(String[] args) throws IOException { FileInputStreamfis = new FileInputStream("f:\\test\\ps.txt"); /*fis.read()读数据 by=fis.read()把读取到的数据赋值给变量by !=1判断by的值是不是等于负1