问题标签 [randomaccessfile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 使用 RandomAccessFile 检查空位置
我需要检查是否没有写入随机访问文件中的位置。这样做的问题是,当该位置实际上还没有被写入时,我得到(如预期的那样)一个 EOFException。我一直在阅读 RandomAccessFile 文档以尝试解决此问题,并尝试在线研究。
我尝试过的事情:
使用 try-catch 块并在每次出现 EOFException 时进行捕获(使用 try-catch 作为条件语句)。它有效,但这是一种可怕的做法,而且效率非常低,就我而言,大部分时间都是 EOF。
使用 BufferReader 循环并检查位置。我最终遇到了很多问题,并决定必须有更好的方法。
我不想将一个文件复制到另一个文件或任何其他解决方法。我知道必须有一种直接的方法来做到这一点,我似乎无法找到正确的解决方案。
java - Java 随机文件访问:获取行开始的字节偏移量
我需要随机访问文本(ASCII)文件中的特定记录,然后从那里读取,直到找到特定的“停止序列”(记录分隔符)。该文件包含多行记录,每条记录由分隔符分隔。每条记录也需要不同数量的行!这是特定专业领域中众所周知的文件格式,无法更改。
我想索引文件,以便快速跳转到请求的记录。
在类似的问题中
和其中的链接,答案总是引用seek()
各种类的方法,如RandomAccessFile
. 我知道这件事!
我遇到的问题是如何获得寻找所需的偏移量!(索引文件)
BufferedReader
没有getFilePointer()
方法或任何其他方法来获取从文件开头的当前字节偏移量。RandomAccessFile
有一种readLine()
方法,但它的性能非常糟糕。对于我的情况,它根本不可用。
我需要逐行读取文件,每次找到记录分隔符时,我都需要获取字节偏移量。我怎样才能做到这一点?
java - 使用 Java 的读取字节时的 IndexOutofBounds
我在 Java 6 中使用RandomAccessFile,但在读取字节时有一些奇怪的行为。
使用以下代码,在哪里offset
和data
被适当地初始化:
我得到以下堆栈跟踪:
但是,使用相同的offset
and值data
,以下(看似相同)代码可以正常工作!
有人知道为什么会这样吗?
android - 这个 RandomAccessFile 对象应该在哪里调用 close() 函数
我有一个名为 GraphView 的类,它扩展了 View,我在这个类中进行了一些计算。这个类
的对象代表了一个我在屏幕上显示的自定义 Graph。这是在 MainActivity 文件中创建的
我需要在扩展的 View 类中保存一个数组的值,所以我想在类中创建一个 RandomAccessFile 对象,我可能会在 GraphView 的构造函数中初始化这个对象,但是我在哪里指定 close() 函数?
只要程序运行,图形就会一直显示在屏幕上,所以我不确定 close() 函数应该在哪里,因为 Java 中似乎没有析构函数。
java - 从二进制文件读取或创建它的问题
当我创建文件时,我使用 dataoutputstream 一次写入一个“int”:
当然它没有说 0 它是一个变量,但我打印了它,第一个是 0 所以我以那个为例。
现在我不是 100% 确定,但只使用那行代码,我的文件现在应该包含:
正确的?
因此,当我尝试使用以下方法读取前 4 个字节时:
ByteArr 应该只包含 0?
好吧,我打印了 Byte[],这就是我得到的:
亲切的问候困惑的船长
java - Android:如何从 InputStream 进行随机访问?
我有一个 InputStream,以及相对文件名和大小。
我需要访问/读取 InputStream 中的一些随机(增加)位置。该位置存储在一个整数数组(称为偏移量)中。
现在,给定一个 InputStream,我发现只有两种可能的解决方案可以跳转到文件的随机(增加)位置。
第一个是使用InputStream的skip()方法(请注意,我实际上使用的是BufferedInputStream,因为我需要mark()和reset()文件指针)。
问题是,在我的测试中,对于一些(通常是大的)偏移,它在跳过正确的字节数之前已经循环了 5 次或更多次。正常吗?而且,最重要的是,我可以/应该推动skip()吗?(即:10 个周期是否足以确定它总是会到达正确的偏移量?)
我发现的唯一替代方法是通过File.createTempFile(prefix, suffix, directory)和以下函数从InputStream创建一个RandomAccessFile 。
拥有RandomAccessFile实际上是一个更好的解决方案,但性能呈指数级下降(最重要的是因为我将拥有多个文件)。
编辑:使用byte[] buffer = new byte[fileSize]加速(和很多) RandomAccessFile 创建!
现在,是否有更好(或更优雅)的解决方案来从 InputStream 进行“随机”访问?
java - 具有非常大二进制数的 Java BigInteger
我有 2 个非常大的二进制数(144 位)。我想将它们写在不同的 RandomAccessFiles 中,然后将文件读入内存并检查哪个数字更大。到目前为止我做了什么:
1. 我创建了一个 BigInteger:
2. 我得到了 longValue:
3 ..我将long写入随机访问文件,读取文件,比较long等......
但是,如果二进制文件比“Long.maxvalue”长,我所做的是错误的,对吗?
那么有人有什么建议吗?
否则我可以处理大二进制数吗?
java - RandomAccessFile:将所有项目设置为相同的字节数?
如果上面的示例都是整数,我可以将记录大小设置为等于 12(因为 3 个整数 * 4 字节 = 12),但是我怎么知道 2 字符串对于名称和城市有多大?
java - RandomAccessFile:获取 Java.io.EOFException
我有代码:
当我运行它时,我收到错误消息说它是空的。我明白为什么会发生这种情况,但我怎么知道要查找哪个字节,以便为 Bob 读取数据?seek(12) 给出空值。
javascript - 从浏览器托管的应用程序随机访问(或至少增量)写入文件
我正在设计一个旨在在浏览器中运行的应用程序。此应用程序正在生成一些数据,然后将其保存到文件中。在某些情况下,这些数据的数量可能会超过可用 RAM 的数量,因此我们不能等到所有数据都创建完毕后才立即将其写入磁盘。
我需要从基于浏览器的应用程序对文件进行随机访问或(至少)增量(即附加)写入。
在我的研究中,我发现以下内容:
- HTML5 FileSystem API:给了我们我们想要的东西,但目前只在基于 webkit 的浏览器(Chrome、Opera)中可用。正如本文档所述,Firefox 不打算在最近的版本中实现它,没有关于 IE11 或 Safari 7 的信息可用。
- 我发现的所有基于 js 的文件保存过程的实现都不支持这个(预期)。
- Flash 有一个FileStream类,但它在浏览器内的 Flash 播放器中不可用。
- Silverlight 也有一个FileStream 类,但是使用它的应用程序需要是一个提升信任的应用程序。基于浏览器的 Silverlight 应用程序只能是提升信任的应用程序,前提是在 Windows 注册表中如此说明。这显然不是 Web 应用程序的选项。此外,这在 Mac OS 上可能是不可能的。
我在这里看到的其他选项是 ActiveX 和 Java。
那么,我是否缺少 js、Flash 或 Silverlight 的某些内容?是否可以使用 ActiveX 或 Java?还有其他选择吗?