以下代码使用SerialPort模块来侦听来自蓝牙连接的数据.
我期待在控制台中看到十六进制格式的数据流.但是控制台只显示了一些奇怪的符号.我想知道如何在控制台中解码和显示数据.
var serialPort = new SerialPort("/dev/tty.EV3-SerialPort", {
parser: SP.parsers.raw
}, false); // this is the openImmediately flag [default is true]
serialPort.open(function () {
console.log('open');
serialPort.on('data', function(data) {
var buff = new Buffer(data, 'utf8'); //no sure about this
console.log('data received: ' + buff.toString());
});
});
Run Code Online (Sandbox Code Playgroud) 我刚刚学习了输入/输出BufferedReader.
我想知道究竟是什么术语的含义Stream和Buffer?
这行代码还为我们提供了什么:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Run Code Online (Sandbox Code Playgroud) 我有一个流时间序列,我有兴趣保留最后4个元素,这意味着我希望能够弹出第一个,然后添加到最后.哪个Java Collection最适合这个?矢量?
我有一个JSON对象,我正在将它转换为Buffer并在此处执行一些处理.后来我想转换相同的缓冲区数据以转换为有效的JSON对象.
我正在研究Node V6.9.1
下面是我尝试的代码,但是Buffer当我转换回JSON并且无法打开此对象时我得到了.
var obj = {
key:'value',
key:'value',
key:'value',
key:'value',
key:'value'
}
var buf = new Buffer.from(obj.toString());
console.log('Real Buffer ' + buf); //This prints --> Real Buffer <Buffer 5b 6f 62 6a 65 63 74>
var temp = buf.toString();
console.log('Buffer to String ' + buf); //This prints --> Buffer to String [object Object]
Run Code Online (Sandbox Code Playgroud)
所以我试图用检查方式打印整个对象
console.log('Full temp ' + require('util').inspect(buf, { depth: null })); //This prints --> '[object object]' [not printing the obj like declared above]
Run Code Online (Sandbox Code Playgroud)
如果我尝试像数组一样阅读它 …
可能重复:
将整数转换为字节数组(Java)
我需要存储一个缓冲区的长度,在一个4字节大的字节数组中.
伪代码:
private byte[] convertLengthToByte(byte[] myBuffer)
{
int length = myBuffer.length;
byte[] byteLength = new byte[4];
//here is where I need to convert the int length to a byte array
byteLength = length.toByteArray;
return byteLength;
}
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?请记住,我必须稍后将该字节数组转换回整数.
假设我正在写几个文件到磁盘,介于2MB和5GB之间.什么是FileStream的合理缓冲区值?
使用几兆字节的缓冲区是否合理,还是应该坚持使用千字节缓冲区?
我有以下程序:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如上面代码的作者所解释的那样:程序将无法正常工作,因为在第1行,当用户按下Enter时,它将在输入缓冲区中留下2个字符:Enter key (ASCII code 13)和\n (ASCII code 10).因此,在第2行,它将读取\n并且不会等待用户输入字符.
好的,我明白了.但我的第一个问题是:为什么第二个getchar()(ch2 = getchar();)不读取Enter key (13)而不是\n字符?
接下来,作者提出了两种解决此类问题的方法:
使用 fflush()
写一个这样的函数:
void
clear …Run Code Online (Sandbox Code Playgroud)我尝试使用ideavim插件从IDEA复制文本,使用默认的vim键绑定(y).但是这个文本没有复制到全局缓冲区中,我只能在IDEA中粘贴它.
例如,如何在浏览器中使用复制的文本?
我有一个带有一些二进制数据的缓冲区:
var b = new Buffer ([0x00, 0x01, 0x02]);
Run Code Online (Sandbox Code Playgroud)
而且我想补充一下0x03.
如何附加更多二进制数据?我在文档中搜索但是为了追加数据它必须是一个字符串,如果没有,就会发生错误(TypeError:Argument必须是一个字符串):
var b = new Buffer (256);
b.write ("hola");
console.log (b.toString ("utf8", 0, 4)); //hola
b.write (", adios", 4);
console.log (b.toString ("utf8", 0, 11)); //hola, adios
Run Code Online (Sandbox Code Playgroud)
然后,我在这里看到的唯一解决方案是为每个附加的二进制数据创建一个新的缓冲区,并将其复制到具有正确偏移量的主缓冲区:
var b = new Buffer (4); //4 for having a nice printed buffer, but the size will be 16KB
new Buffer ([0x00, 0x01, 0x02]).copy (b);
console.log (b); //<Buffer 00 01 02 00>
new Buffer ([0x03]).copy (b, 3);
console.log (b); …Run Code Online (Sandbox Code Playgroud) 检查内存视图上的文档:
memoryview对象允许Python代码访问支持缓冲区协议的对象的内部数据而无需复制.
class memoryview(obj)
创建一个引用obj的内存视图.obj必须支持缓冲协议.支持缓冲区协议的内置对象包括bytes和bytearray.
然后我们给出示例代码:
>>> v = memoryview(b'abcefg')
>>> v[1]
98
>>> v[-1]
103
>>> v[1:4]
<memory at 0x7f3ddc9f4350>
>>> bytes(v[1:4])
b'bce'
Run Code Online (Sandbox Code Playgroud)
报价结束,现在让我们仔细看看:
>>> b = b'long bytes stream'
>>> b.startswith(b'long')
True
>>> v = memoryview(b)
>>> vsub = v[5:]
>>> vsub.startswith(b'bytes')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'memoryview' object has no attribute 'startswith'
>>> bytes(vsub).startswith(b'bytes')
True
>>>
Run Code Online (Sandbox Code Playgroud)
所以我从上面收集的内容:
我们创建一个memoryview对象来公开缓冲区对象的内部数据而不进行复制,但是,为了对对象做任何有用的事情(通过调用对象提供的方法),我们必须创建一个副本!
当我们有一个大对象时,通常需要memoryview(或旧的缓冲区对象),并且切片也可能很大.如果我们正在制作大切片,或者制作小切片但需要很多次,则需要提高效率.
有了上述方案,我看不出它对两种情况都有用,除非有人能向我解释我在这里缺少的东西.
EDIT1:
我们有大量数据,我们希望通过从头到尾推进它来处理它,例如从字符串缓冲区的开头提取标记,直到缓冲区被消耗.在C语言中,这是推进指针通过缓冲区,指针可以传递给任何期望缓冲区类型的函数.如何在python中完成类似的事情?
人们建议使用变通方法,例如许多字符串和正则表达式函数采用可用于模拟推进指针的位置参数.这有两个问题:首先是一个解决方法,你被迫改变你的编码风格来克服缺点,第二个:并非所有函数都有位置参数,例如正则表达式函数和startswithdo,encode()/ …