标签: bytebuffer

如何在java中写入字节缓冲区的一半?

假设每次输入蒸汽的缓冲区读取1000个字节.缓冲区的开头有一些开始标志和视频名称,在实际视频内容之前,如100字节.我不想将它们写入结果缓冲区.所以第一次将101-999写入缓冲区.而第二次我希望写1000-1999.目前,它再次写入0-999,结果视频在实际视频内容之前有900个额外字节.

无论如何写缓冲区跳过第一个缓冲区长度?谢谢!

java video bytebuffer bufferedreader

0
推荐指数
1
解决办法
2093
查看次数

Java ByteBuffer"put"方法 - 防止缓冲区溢出

我想以下列方式使用java nio ByteBuffer的put方法:

ByteBuffer small = ByteBuffer.allocate(SMALL_AMOUNT_OF_BYTES);
ByteBuffer big = getAllData();

while (big.hasRemaining()){
    small.put(big);
    send(small);
}
Run Code Online (Sandbox Code Playgroud)

put方法会抛出缓冲区溢出异常,所以我要修复的是:

 ByteBuffer small = ByteBuffer.allocate(SMALL_AMOUNT_OF_BYTES);
 ByteBuffer big = getAllData();

 while (big.hasRemaining()){
     while (small.hasRemaining() && big.hasRemaining()){
         small.put(big.get());
     }

     send(small);
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 有更好的方法这样做,或者至少有效的方式来做我想要的吗?

java networking nio bytebuffer

0
推荐指数
1
解决办法
2818
查看次数

Java NIO.为什么flip()方法会破坏我的程序?

下面的Java代码:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

public class Test {
    public static void main(String args[]) throws IOException {

        SocketChannel c = SocketChannel.open();
        c.connect(new InetSocketAddress("google.com", 80));

        ByteBuffer b = ByteBuffer.allocate(1024);
        b.put("Request".getBytes());

        System.out.println("Write: " + c.write(b));

        int i;
        while ((i = c.read(b)) != -1) {

            System.out.println("Read: " + i);
            b.clear();

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

实际结果:

写:1017阅读:0阅读:1024阅读:44

第一次,方法read()读取0个字节.这不酷.

我修改了我的代码:

    b.put("Request".getBytes());

    System.out.println("Write: " + c.write(b));

    b.flip(); //I added this line
    int i;
    while ((i = c.read(b)) != -1) {

        System.out.println("Read: …
Run Code Online (Sandbox Code Playgroud)

java nio bytebuffer socketchannel

0
推荐指数
1
解决办法
2563
查看次数

来自十六进制字符串的字节转换在字母字符"G"和C#中向上保持失败

我正在尝试构建一个简单的XOR函数,用于解密单个字符的十六进制密钥.它适用于多个角色和个别角色......但仅限于"A"到"F".从"G"开始,它不断抛出"FormatException".

这是问题函数,传递两个字符串:

    // For Reference:
    // strHexKey = "G";
    // strHexInput = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736"

    private string SCXOR_Update(string strHexKey, string strHexInput)
    {
        byte[] buffer1 = hexbuffer(strHexInput);
        byte buffer2 = Convert.ToByte(Convert.ToInt32(strHexKey, 16));
        byte[] result = buffer1;

        for (int i = 0; i < (strHexInput.Length / 2); i++)
        {
            result[i] = (byte)(buffer1[i] ^ buffer2);
        }

        return BitConverter.ToString(result).Replace("-", "");
    }
Run Code Online (Sandbox Code Playgroud)

在"byte buffer2"行抛出异常,并且仅在从字母"G"向上推进时发生.

知道我错过了什么吗?它必须在脸上瞪着我?!

提前致谢!

c# string cryptography bytebuffer xor

0
推荐指数
1
解决办法
150
查看次数

Android ByteBuffer浮动转换返回错误的值

我试图读取txt文件使用RandomAccessFile并且FileChannel包含大量的浮点/整数值,但在使用ByteBuffer我得到的值的所有对话之后,与txt文件中的值不同.我是这样做的:

        RandomAccessFile mRandomFile = new RandomAccessFile(Environment.getExternalStorageDirectory() + "/Models/vertices.txt", "rw");
        FileChannel mInChannel = mRandomFile.getChannel();
        ByteBuffer mBuffer = ByteBuffer.allocate(181017 * 4);
        mBuffer.clear();

        mInChannel.read(mBuffer);

        mBuffer.rewind();
        FloatBuffer mFloatBUffer = mBuffer.asFloatBuffer();
        mFloatBUffer.get(VERTS);

        mInChannel.close();

        for (int i = 0; i < 20; i++) {
            Log.d("", "VALUE: " + VERTS[i]);
        }
Run Code Online (Sandbox Code Playgroud)

txt文件中的值以这种方式显示(它们用新行分隔):

-36.122300
-6.356030
-46.876744
-36.122303
-7.448818
-46.876756
-36.122303
-7.448818
81.123221
-36.122300
-6.356030
81.123209
36.817676
-6.356030
-46.876779
36.817676
-7.448818
-46.876779
-36.122303
-7.448818
Run Code Online (Sandbox Code Playgroud)

我得到的价值for是:

VALUE: 1.0187002E-11
VALUE: 2.5930944E-9
VALUE: 6.404289E-10 …
Run Code Online (Sandbox Code Playgroud)

java android bytebuffer

0
推荐指数
1
解决办法
380
查看次数

使用位操作符将字节转换为int

我在java中记录了一些代码.在我问我的问题之前,我会给你们一些背景信息.目标是读取和处理orsm文件,该文件是包含十六进制代码的文件.

流程如下:使用FileChannel将somme字节读入ByteBuffer.填充缓冲区后,将每个字节转换为有符号整数.这是使用移位运算符完成的,如下所示:

return  (0x000000ff & (bb.get() << 0)) |
        (0x0000ff00 & (bb.get() << 8)) |
        (0x00ff0000 & (bb.get() << 16)) |
        (0xff000000 & (bb.get() << 24));
Run Code Online (Sandbox Code Playgroud)

其中bb属于Bytebuffer.我完全不知道这段代码是如何以及为什么有效的,我搜索了一个出价,我找到的关闭的东西是这个旧的stackoverflow主题.我仍然没有任何线索,我想知道你是否可以帮助我解决这个代码剪断?

java int byte bytebuffer bit-manipulation

0
推荐指数
1
解决办法
979
查看次数

在字节缓冲区内复制struct

我有以下结构:

struct sample {
  uint8_t four;
  bool    b;
  uint8_t two;
};
Run Code Online (Sandbox Code Playgroud)

为了发送udp数据包,我需要将这些值打包成一个字节:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+
|     four      | 0 | b |  two  |
+---------------+---+---+-------+
Run Code Online (Sandbox Code Playgroud)

在这个字节中复制struct值的最佳方法是什么?我在检查之前检查了前提条件,因此在将uint8_t值复制到更小的空间时不会丢失任何数据.

c++ buffer byte bytebuffer memcpy

0
推荐指数
1
解决办法
49
查看次数

std::string 与字节缓冲区(C++ 中的差异)

我有一个项目,使用 boost.asio 套接字在客户端和服务器之间传输数据。一旦连接的一侧接收到数据,它就会将其转换为 of std::vectors std::string,然后通过先前定义的“回调”函数将其传递到数据的实际接收者对象。到目前为止,这种方式工作得很好,只是,我此时使用atoi()和之类的方法to_string将字符串以外的其他数据类型转换为可发送格式并返回。当然,这种方法在网络使用方面有点浪费(特别是当传输的数据量大于单个整数和浮点数时)。因此我想序列化和反序列化数据。实际上,任何序列化方法都会生成字节数组或缓冲区,因此对我来说使用它会很方便std::string。这样做有什么坏处吗?我不明白为什么应该有一次,因为字符串应该只不过是字节数组。

c++ arrays string bytebuffer

0
推荐指数
1
解决办法
3746
查看次数

在String中将String转换为字节

可能重复:
使用Java将十六进制转储的字符串表示形式转换为字节数组?

我想将String转换"1B4322C2"为字节,但问题是,如果我使用getBytes()它将它转换为字符串的长度加倍的字节,我想将它们转换为字符串长度的一半.

例如,上面字符串的输出应该是 {0x1B , 0x43, 0x22, 0xC2}

谢谢

java byte bytebuffer

-1
推荐指数
1
解决办法
2253
查看次数

有没有合法的方法将unsigned char指针转换为std :: byte指针?

我使用STB库将图像加载到内存中.特定函数stbi_load返回指向a的指针unsigned char,该指针是一个数组.

我很想将新的C++ 17 API用于原始数据,std::byte这将使我更具表现力,让我逐个像素地对原始数据进行别名,或者通过将其转换为不同的数据类型来逐个颜色(不同大小的整数).

现在我尝试了这个:

std::unique_ptr<std::byte[], stbi_deleter>(stbi_load(...));
Run Code Online (Sandbox Code Playgroud)

当然,由于缺乏隐式转换,它不起作用.

然后我尝试了:

std::unique_ptr<std::byte[], stbi_deleter>(
  static_cast<std::byte*>(stbi_load(...))
);
Run Code Online (Sandbox Code Playgroud)

同样,它仍然没有奏效.我不得不决定使用reinterpret_cast.并让我怀疑这种转换是否合法.我unsigned char*可以std::byte* 根据严格的别名规则合法地转换为?然后我可以将数据转换为另一种数据类型std::uint32_t*并进行变异吗?这会破坏别名规则吗?

c++ casting bytebuffer strict-aliasing

-1
推荐指数
1
解决办法
193
查看次数

以十六进制表示法将字节缓冲区的字节打印到控制台输出流(0xABCDEF)

我知道有很多关于这个主题的问题,但我认为找不到合适的关键字,所以我问.

我想打印出一个字节缓冲区的字节到十六进制表示法(0xABCDEF)的控制台输出,但我不知道什么是字节缓冲区,它用于什么?

我需要以下的东西,我只是一个初学者,所以请简单,我可以得到.(在c/c ++中)

@param pBytes指向字节缓冲区的指针@param nBytes字节缓冲区的长度,以字节为单位

void PrintBytes(const char* pBytes, const uint32_t nBytes);
Run Code Online (Sandbox Code Playgroud)

我需要那些功能.

你不需要给出我需要你的答案,让我更容易!谢谢!

c c++ hex types bytebuffer

-3
推荐指数
1
解决办法
4812
查看次数