我有一個字節[],並想複製到另一個字節[]。也許我在這裏展示了我簡單的'C'背景,但是在Java中的字節數組中存在與memcpy()等效的內容嗎?在Java中是否存在與memcpy()等效的內容?
回答
您可以嘗試System.arraycopy
或使用Arrays
類中的數組函數,如java.util.Arrays.copyOf
。兩者都應該爲您提供本機性能。
Arrays.copyOf可能有利於可讀性,但僅在java 1.6中引入。
byte[] src = {1, 2, 3, 4};
byte[] dst = Arrays.copyOf(src, src.length);
System.out.println(Arrays.toString(dst));
您可以使用System.arraycopy
您可以使用System.arrayCopy。它將元素從源數組複製到目標數組。 Sun的實現使用手動優化的彙編程序,因此速度很快。
System.arraycopy(sourceArray,
sourceStartIndex,
targetArray,
targetStartIndex,
length);
實施例,
String[] source = { "alpha", "beta", "gamma" };
String[] target = new String[source.length];
System.arraycopy(source, 0, target, 0, source.length);
或使用Arrays.copyOf()
實施例,
target = Arrays.copyOf(source, length);
在JDK 1.6中添加了。
copyOf()
方法使用System.arrayCopy()
複製數組,但比clone()
更靈活,因爲您可以複製數組的各個部分。
+1的例子。 – 2010-07-25 12:41:15
Arrays.copyOf()也分配內存。在你的例子中,如果你改變了String [] target = new String [4];然後target = Arrays.copyOf()它創建一個新的目標,它是一個String [3]。不是memcopy行爲。 – MikeF 2016-06-14 13:11:44
如果您只想要一維數組的精確副本,請使用clone()
。
byte[] array = { 0x0A, 0x01 };
byte[] copy = array.clone();
對於其它陣列的複製操作,使用System.arrayCopy
/Arrays.copyOf
作爲Tom suggests。
一般而言,clone
應該避免,但這是規則的例外。
另請參閱http://stackoverflow.com/questions/3208899/how-do-i-clone-a-java-byte-array的接受答案中的更多詳細信息。 – 2015-01-08 17:04:52
Java實際上的確有些東西就像memcpy()。不安全類有一個與memcpy()基本相同的copyMemory()方法。當然,就像memcpy()一樣,它不提供內存覆蓋,數據銷燬等保護。不清楚它是真的是memcpy()還是memmove()。它可用於從實際地址複製到實際地址或從參考文獻引用。請注意,如果使用引用,則必須提供偏移量(否則JVM將盡快死亡)。 ()我的老累PC上每秒鐘高達2 GB)。使用風險自負。請注意,所有JVM實現都不存在不安全類。
對於這個古老的線程去所有寵物sematary抱歉,但你能給我一個例子如何做一個參考數組。對於少量數據(比如1到4 MB)它更快嗎?或者對於像你提到的2GB那樣的更大數據來說,它是值得的? – FinnTheHuman 2016-06-29 16:16:42
使用'sun.misc.Unsafe'類被認爲是一個糟糕的做法「黑客」B/C它是一個*私人*包類。另外,從Java 9開始,它將不再可用,因此嘗試使用此類與請求代碼意外中斷相同。 – ray 2017-05-30 07:45:45
- 1. 是否存在與memcpy()在CUDA內核中等效的內容?
- 2. 在Visual Studio中是否存在與malloc_history等效的內容?
- 3. ADO中是否存在與RDO.OpenResultset等效的內容?
- 4. MongoDB中是否存在與SQL_NO_CACHE等效的內容?
- 5. 是否存在與hit3D hitTestObject等效的內容?
- 6. 在JSP中是否存在與java @SuppressWarnings等效的問題
- 7. 在Rails控制器中是否存在與jQuery $(this)等效的內容?
- 8. 在背景頁面中是否存在與「run_at:start」等效的內容?
- 9. C#中是否存在與Java中的File.separator等效的文件
- 10. 在oracle中是否有與sp_getapplock,sp_releaseapplock等效的內容
- 11. 在MS-SQL中是否存在與SHA1()等價的內容?
- 12. 是否存在與SQL中的iSeries OVRDBF命令等效的內容?
- 13. 是否存在.net TypeConverter等效於Java
- 14. 是否存在與C#的'checked'關鍵字等效的Java?
- 15. 是否存在與Eclipse片段項目的BundleActivator等效的內容?
- 16. 是否存在與Microsoft/.NET System.IO.Packaging等效的Java庫?
- 17. 是否有與SharePoint Web服務中的SPWeb.Properties等效的內容?
- 18. 在java中是否存在C#Type.GetType()的任何等效語法
- 19. freemarker中是否有與html_encode等效的內容?
- 20. 在.Net中是否存在與HTML等效的XmlReader?
- 21. 在Excel中是否存在與.NETWORKDAYS等效的.NET方法?
- 22. 在make中是否存在與-j等效的checkinstall選項?
- 23. 在.NET中是否存在與Path.PathSeparator等效的URI?
- 24. 在ClearCase中是否存在與RTC等效的「掛起模式」?
- 25. JavaScript中是否存在「OrElse」等效項?
- 26. 在XML :: LibXML中是否存在與XML :: DOM :: Node :: dispose等價的內容?
- 27. 在Java中是否有一個STL-Multiset等效容器?
- 28. 是否有與Access的「On Record Changed」事件等效的內容?
- 29. 是否有與iOS上的「adb shell」等效的內容
- 30. 在Silverlight中是否存在與ProcessTabKey等效的內容(專注於層次結構中的下一個控件)
我認爲第二個選擇更「合乎邏輯」。我從來不明白爲什麼System.arraycopy()是最可能的位置之一。 – sinuhepop 2010-07-25 13:29:01
@Sinuhe - 這是歷史原因。 – 2010-07-25 13:46:58
這不是正確的答案。 memcpy()不分配數據,只複製到現有的緩衝區。而Arrays.copyOf()明確地分配新的內存。 – splinux 2016-02-17 17:10:01