Tag: bytearray

在将数据报转换为Java中的字节数组之后解析它

我正在尝试解析我将在套接字上收到的DatagramPacket。 我知道我将收到的数据包的格式,这是一个DHCPREQUEST数据包,但我认为这不重要。 为简单起见,我们只考虑前六个字段: 第一个字段是“操作码”,它是1个字节。 第二个字段是“硬件类型”,它是1个字节。 三,“硬件地址长度”,1个字节。 第四,“跳”,1个字节。 五,“事务标识符xid”,4个字节。 第六,“秒”,2个字节。 收到数据包后,我的方法是将其转换为字节数组。 DatagramPacket request = new DatagramPacket(new byte[1024], 1024); socket.receive(request); byte[] buf = request.getData(); 此时,数据包作为一系列字节存储在字节数组buf中。 既然我知道这个字节序列的结构是什么,我该如何解析呢? 单字节字段很简单,但多位字段怎么样? 例如,如何提取字节4到7,并将它们存储在名为xid的变量中? 我可以手动将每个字节放入一个数组: byte[] xid = new byte[4]; xid[0] = buf[4]; xid[1] = buf[5]; xid[2] = buf[6]; xid[3] = buf[7]; 但这对于数百字节长的字段来说只是单调乏味而且不切实际。 给定偏移和长度的String类可以解析子字符串; Java中的字节数组有类似的方法吗? 或者我在某种程度上让自己变得困难?

Google Protobuf ByteString vs. Byte

我正在使用Java中的google protobuf。 我看到可以将protobuf消息序列化为String,byte [],ByteString等:(来源: https : //developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf / MessageLite ) 我不知道ByteString是什么。 我从protobuf API文档中获得了以下定义(来源: https : //developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/ByteString ):“不可变的字节序列。子串与String一样,通过共享对不可变底层字节的引用来支持。“ 我不清楚ByteString如何与String或byte []不同。 有人可以解释一下吗? 谢谢。

Java:内存高效的ByteArrayOutputStream

我在磁盘中有一个40MB的文件,我需要使用字节数组将其“映射”到内存中。 起初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时刻需要大约160MB的堆空间。 如果不使用RAM文件大小的三倍,有人知道更好的方法吗? 更新:感谢您的回答。 我注意到我可以减少内存消耗,稍微告诉ByteArrayOutputStream初始大小要比原始文件大小稍大一些(使用我的代码强制重新分配的确切大小,得到检查原因)。 还有另一个高内存点:当我用ByteArrayOutputStream.toByteArray返回byte []时。 看看它的源代码,我可以看到它正在克隆数组: public synchronized byte toByteArray()[] { return Arrays.copyOf(buf, count); } 我想我可以扩展ByteArrayOutputStream并重写此方法,以便直接返回原始数组。 这里有没有潜在的危险,因为流和字节数组不会被多次使用?

用java加密整数

我正在尝试使用java.security和javax.crypto加密java中的一些整数。 问题似乎是Cipher类只加密字节数组。 我不能直接将整数转换为字节串(或者我可以?)。 做这个的最好方式是什么? 我应该将整数转换为字符串,将字符串转换为byte []吗? 这似乎效率太低。 有谁知道快速/简单或有效的方法吗? 请告诉我。 提前致谢。 JBU

如何将String转换为字节数组?

我有一个String,它包含字节数组的String值。 我怎么能把这个字符串转换为字节数组? 我怎么试过: String stringValue=”33321232″; //the bytes in String byte[] bytes= (byte[])stringValue; System.out.println(getByteArrayAsString(bytes)); getByteArrayAsString方法应该返回结果String: 33321232 ,所以与stringValue相同。 (这是我的方法,它是有效的,但如何获取bytes ?) 谢谢!

将100多个字符串转换为字节数组时的java.lang.OutOfMemoryError

首先,我理解有关java.lang.OutOfMemoryError和Bitmaps的问题,之前已经多次询问过。 我还检查了有效显示位图页面。 我的用例: 我在SQLite数据库中存储两个不同大小的位图作为字符串。 位图的第一个尺寸是屏幕宽度的50%,第二个尺寸是屏幕宽度的100%。 我正在使用RecyclerView,它在ImageViews中显示图像,这些图像是屏幕宽度的50%或100%,因此加载的位图并不比它们需要的大,并且在从图像中检索图像之前它们的大小合适。数据库。 我也使用AsyncTask加载位图。 我在RecyclerView中有超过180个不同的项目,因此我创建了总共超过360个位图(即numberOfimages * theDifferentSizesOfEachImage)。 我通过以下代码将图像的String版本转换为字节数组: byte [] byteArray = Base64.decode(encodedString, Base64.DEFAULT); 问题 除非我重新启动相同的Activity(例如加载Activity,然后通过在导航抽屉中再次单击它重新创建Activity,然后重复该过程),Activity可以加载大约170个不同的图像而不会发生java.lang.OutOfMemoryError 。 )并在将字符串转换为字节数组时引发了java.lang.OutOfMemoryError 。 我使用以下代码使用Glide库将字节数组转换为Bitmap: Bitmap bitmap = Glide.with(context).load(byteArray).asBitmap() .dontTransform().dontAnimate().skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE).into(-1, -1).get(); 我的问题简而言之 在将字符串转换为字节数组时,如何避免发生java.lang.OutOfMemoryError ? 注意 使用Glide创建一个Bitmap后,我在给定的Bitmap上调用recycle(),然后将其设置为null 。 我也已在我的Android Manifest中使用android:largeHeap=”true” 提前致谢 编辑 以下是我创建Bitmap字符串的方法: ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.WEBP,100, baos); byte [] b =baos.toByteArray(); String bitmapString = […]

签名变更

任何人都可以建议我如何将字节数组转换为字符串? 此方法不起作用: byte [] my_array=….; String my_string = new String (my_array); 要么 String my_string = my_array.toString(); 我想要做的是将签名转换为字符串并将其传递给另一方。 但是当我使用上面的方法和方法时,my_string.getBytes()签名会发生变化,然后无法validation。 我的意思是例如my_string在我执行my_string.getBytes().toString()或my_array之后发生更改(new String(my_array)).getBytes() 谢谢。

将一组字符串转换为byte 数组

我想将一组字符串转换为byte []数组。 首先,我做这样的事情将字节数组转换为字符串: public String convertByte(byte[] msg) { String str = “”; for(int i = 0; i < msg.length; i++) { str += (msg[i] + " * "); } return str; } 当我尝试转换回byte []数组时,我得到的值与转换为String时的值不同。 我原来有些东西给了我错误的价值观。 我目前正在尝试以下方面: public static byte[] convertStr(String ln) { System.out.println(ln); String[] st = ln.split(” * “); byte[] byteArray = new byte[23]; for(int […]

声纳违规:安全性 – 使用byte 时直接存储数组

我确实遇到了以下2个关于类似问题声纳违规和声纳违规的post但是,我的问题是使用byte[] 以下是我在Sonar中收到此警告的代码段 public void setValue(byte[] value) { this.value = value; } 我查看了解决方案并进行了以下更改 public void setValue(byte[] value) { if(value == null) { this.value = new byte[0]; } else { this.value= Arrays.copyOf(value, value.length); } } 即便如此,我在Sonar中收到了相同的安全违规警告。 我是否收到此警告,因为它是byte[]并且字节数组需要以不同方式处理?

Java:从.txt文件LINE BY LINE中读取字节

请查看以下代码 import java.io.*; import java.util.ArrayList; import java.util.List; public class FileCopy2 { public static void main(String[]args) { try { //First in here, we are trying to get the bytes from the file File file = new File(“D:/burn/preview.mp3”); //The File you need to get byte bufferFile[] = new byte[(int)file.length()]; //Creating a byte array, which has the exact […]