Java实现字节数组中截取指定长度数组元素

近期有通信需求需对byte[]进行处理,在解析请求报文时,需按报文协议规定的长度截取栏位进行解析。

问题

使用String.class自带的函数,但截取出来的byte[]不符合预期:

publicString(bytebytes[],intoffset,intlength,StringcharsetName)

代码如下:

//----------------teststart---------------
byte[]abc=newString(send,50,75,"UTF-8").getBytes("UTF-8");
//byte[]abc=newString(send,50,75,"ASCII").getBytes("ASCII");
Mapback=Pos8583Until.*analyze8583*(abc);`
System.*out*.println("完成解析8583报文=="+back.toString
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用`RandomAccessFile`结合`FileChannel`来截取指定位置的文件字节数组。下面是一个示例代码: ```java import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileByteArrayExample { public static void main(String[] args) { try { RandomAccessFile file = new RandomAccessFile("path/to/file", "rw"); FileChannel channel = file.getChannel(); // 指定位置和长度 long position = 100; // 起始位置 int size = 50; // 截取长度 // 创建缓冲区 ByteBuffer buffer = ByteBuffer.allocate(size); // 从指定位置读取数据到缓冲区 channel.read(buffer, position); // 翻转缓冲区以准备读取数据 buffer.flip(); // 创建字节数组并复制数据 byte[] byteArray = new byte[size]; buffer.get(byteArray); // 打印读取的数据 for (byte b : byteArray) { System.out.print((char) b); } // 关闭文件和通道 channel.close(); file.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例,我们创建了一个 `RandomAccessFile` 对象,并通过 `getChannel()` 方法获取了 `FileChannel` 对象。然后,我们指定了要截取的起始位置和长度。接下来,我们创建一个大小为指定长度的缓冲区,并使用 `channel.read()` 方法从指定位置读取数据到缓冲区。最后,我们通过翻转缓冲区来准备读取数据,并使用 `get()` 方法将数据复制到字节数组。 请注意,上述代码仅为示例,您需要根据自己的需求进行适当的修改和异常处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值