对于特殊算法,我必须在文件开头添加(或删除)一次。它必须是一点而不是整个字节,如&00; 0000 0001'。
之后我不必用新内容覆盖文件,所以只要在内存中编辑文件数据就足够了。对于这个算法,我可以添加一个字节,如&00; 0000 0000'或者' 1000 0000'到文件数据的末尾。
您可以将其概括为整个文件的位移。我已经自己试过了。我以整数(32位)读取文件,在每种情况下将它们向右移位,并将最后一位从整数转移到第一位置。
但这种方法肯定不够快。我也搜索了互联网,但我找不到这样的东西。是否有可能更快地做到这一点?
答案 0 :(得分:2)
您的问题的快速答案是:没有办法有效地做到这一点。
长期答案实际上是一系列新问题:你真正想要实现的目标是什么?通过在文件开头移位一位,你甚至意味着什么呢?
你提到用32位块( <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentTop="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="change"
android:gravity="top|left"
android:id="@+id/change"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="add"
android:gravity="top|center_horizontal"
android:id="@+id/add"
/>
<EditText
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|right"
android:id="@+id/edit"/>
</LinearLayout>
</RelativeLayout>
或更好的int
)读取文件并一次移动一个:这样做有一个字节排序问题。它不可移植,因为有些CPU会以小端序(英特尔架构)读取uint32_t
,而其他一些CPU则以大端序(Motorola,PowerPC,ea)读取。
即使以字节为单位的位也有些令人困惑:通过在文件开头移位,是指设置第一个字节的第0x80位还是第一个字节的第0x01位?位图文件和图形卡在这方面存在冲突的惯例。
如果在程序之外指定了此位文件,则应该非常小心这些细节。如果这是您自己的发明,更改算法可能有助于简化这种情况。