⑴ Nodejs 8有哪些重要功能和修复
N-API介绍
N-API是用于构建原生插件的API。它独立于底层java运行时,并作为Node.js自身的一部分进行维护。这么做的目的是保证应用程序二进制接口(ABI)在不同Node.js版本之间能够保持稳定。
N-API的目的是将附加组件和基础Java引擎中的更改区分开,以便原生插件在不需要重新编译情况下,就可以运行不同的Node.js版本。
了解更多N-API信息。
Node.js 8中的缓冲区安全性改进
在Node.js 8版本之前,使用new Buffer(Number)构造函数分配的缓冲区并未使用ZEROS初始化内存空间。结果导致新的Buffer实例可能包含敏感信息,容易导致安全问题。
虽然这是一个用于提高创建新Buffer性能的决定,但是对大多数人来说,并不打算这么使用。因此从Node.js 8开始,使用new Buffer(Number)或Buffer(Number)分配的Buffers会被ZEROS自动填充。
将V8升级到5.8:TurboFan&Ingnition
使用Node.js 8版本,底层的V8 Java引擎也会更新。
对于Node.js用户来说,最大的变化就是引入TurboFan和Ignition。Ignition是V8的解释器,TurboFan是优化编译器。
“Ignition和TurboFan的联合使用已经开发了近3½年,它代表了V8团队集体认识的最终结果,是V8团队收集了Java的实测性能并仔细分析了Full-codegen的缺点和Crankshaft的结果。这也是能够在未来几年内继续优化Java语言体系的基础。“ - Daniel Clifford和V8团队
⑵ java 如何解析WebSocket传输的二进制数据
JS操作接收的二进制,安全性能有保障,已经过一年实践考验:
[javascript]view plain
ws.onmessage=function(evt){
if(typeof(evt.data)=="string"){
textHandler(JSON.parse(evt.data));
}else{
varreader=newFileReader();
reader.onload=function(evt){
if(evt.target.readyState==FileReader.DONE){
vardata=newUint8Array(evt.target.result);
handler(data);
}
}
reader.readAsArrayBuffer(evt.data);
}
};
[html]view plain
functionhandler(data){
switch(data[0]){
case1:
getCard(data[1]);
break;
...
JS操作websocket接收的图片,今天刚写的,也是用filereader实现。
[html]view plain
ws.onmessage=function(evt){
if(typeof(evt.data)=="string"){
//textHandler(JSON.parse(evt.data));
}else{
varreader=newFileReader();
reader.onload=function(evt){
if(evt.target.readyState==FileReader.DONE){
varurl=evt.target.result;
alert(url);
varimg=document.getElementById("imgDiv");
img.innerHTML="<imgsrc="+url+"/>";
}
}
reader.readAsDataURL(evt.data);
}
};
⑶ java中怎么实现js中的Uint8Array
public class Random1{ public static void main(String args[]) { int a[] = new int[10]; for (int i = 0; i <= 5; i++) { a[i] = (int) (Math.random() * 10);//这个地方不能写成(int)Math.random()这是最大的错误 //其他地方乱七八糟的,我就自己写了 } for (int i = 0; i < 5;) System.out.println(i + " : " + a[i++]);//代码中最好不要出现中文 } }
⑷ 如何用CropBox实现头像裁剪并与java后台交互
主流的前端jQuery 图像裁剪插件有Jcrop和CropBox,前者是将原图和需要裁剪的参数(裁剪的各点坐标,旋转角度等)传到后台,然后由后台完成实际的裁剪和后续操作。
CropBox实现功能相对较少,但操作更简单,它的原理是:
将裁减后的图片通过base64编码,然后转化为blob格式发送到服务器,服务器完成解码即可,官网介绍可以看github上的说明和Demo
核心js函数只有两个:
getDataURL 将裁剪后的图片简单以base64编码后的结果,用于实时预览,当然也可以将它直接传到服务器,然后解码为png格式
getBlob 上传图片为Blob格式
首先贴出两个函数的源码:
getDataURL: function ()
{
var width = this.thumbBox.width(),
height = this.thumbBox.height(),
canvas = document.createElement("canvas"),
dim = el.css('background-position').split(' '),
size = el.css('background-size').split(' '),
dx = parseInt(dim[0]) - el.width()/2 + width/2,
dy = parseInt(dim[1]) - el.height()/2 + height/2,
dw = parseInt(size[0]),
dh = parseInt(size[1]),
sh = parseInt(this.image.height),
sw = parseInt(this.image.width);
canvas.width = width;
canvas.height = height;
var context = canvas.getContext("2d");
context.drawImage(this.image, 0, 0, sw, sh, dx, dy, dw, dh);
var imageData = canvas.toDataURL('image/png');
return imageData;
},
getBlob: function()
{
var imageData = this.getDataURL();
var b64 = imageData.replace('data:image/png;base64,','');
var binary = atob(b64);
var array = [];
for (var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type: 'image/png'});
},
⑸ 如何将javascript中uint8array转成普通数组或字符串
Uint8Array对象,8位无符号整数值的类型化数组。内容将初始化为 0。如果无法分配请求数目的字节,则将引发异常。
转换成普通数组的方法:
1、构造
uint8Array = new Uint8Array( length );
2、转换方法:
(1) var array = Array.from(uint8Array)
(2)var array = [].slice.call(uint8Array)
⑹ 如何将字符数组里的内容转换成uint8的类型
Uint8Array对象,8位无符号整数值的类型化数组。内容将初始化为 0。如果无法分配请求数目的字节,则将引发异常。
转换成普通数组的方法:
1、构造uint8Array = new Uint8Array( length );
2、转换方法:(1) var array = Array.from(uint8Array)(2)var array = [].slice.call(uint8Array)
注意事项:
//js往ble写数据的时候,数据类型是arraybuffer类型。在Uint8Array组好数据之后,如果用了
subarray方法,要当心。//subarray返回的Uint8Array.buffer后的内存是subarray前的那片内
存。//如果要新传数据,最好新开辟内存,避免看到的和测到的不一样,产生问题。
⑺ js转java代码
package p1;
import java.util.Arrays;
import java.util.LinkedList;
public class Guy
{
public static void recursionSub ( LinkedList<int[]> list, int count, int[] array, int ind, int start, int... indexs )
{
start++;
if (start > count - 1)
{
return;
}
if (start == 0)
{
indexs = new int[array.length];
}
for ( indexs[start] = ind; indexs[start] < array.length; indexs[start]++ )
{
recursionSub (list, count, array, indexs[start] + 1, start, indexs);
if (start == count - 1)
{
int[] temp = new int[count];
for ( int i = count - 1; i >= 0; i-- )
{
temp[start - i] = array[indexs[start - i]];
}
list.add (temp);
}
}
}
public static void main ( String[] args )
{
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
LinkedList<int[]> list = new LinkedList<int[]> ();
recursionSub (list, 3, array, 0, -1);
for ( int[] strings : list )
{
System.out.println (Arrays.toString (strings));
}
}
}
⑻ 如何用CropBox实现头像裁剪并与java后台交互
主流的前端jQuery 图像裁剪插件有Jcrop和CropBox,前者是将原图和需要裁剪的参数(裁剪的各点坐标,旋转角度等)传到后台,然后由后台完成实际的裁剪和后续操作。
CropBox实现功能相对较少,但操作更简单,它的原理是:
将裁减后的图片通过base64编码,然后转化为blob格式发送到服务器,服务器完成解码即可,介绍可以看github上的说明和Demo
核心js函数只有两个:
getDataURL 将裁剪后的图片简单以base64编码后的结果,用于实时预览,当然也可以将它直接传到服务器,然后解码为png格式
getBlob 上传图片为Blob格式
首先贴出两个函数的源码:
getDataURL: function ()
{
var width = this.thumbBox.width(),
height = this.thumbBox.height(),
canvas = document.createElement("canvas"),
dim = el.css('background-position').split(' '),
size = el.css('background-size').split(' '),
dx = parseInt(dim[0]) - el.width()/2 + width/2,
dy = parseInt(dim[1]) - el.height()/2 + height/2,
dw = parseInt(size[0]),
dh = parseInt(size[1]),
sh = parseInt(this.image.height),
sw = parseInt(this.image.width);
canvas.width = width;
canvas.height = height;
var context = canvas.getContext("2d");
context.drawImage(this.image, 0, 0, sw, sh, dx, dy, dw, dh);
var imageData = canvas.toDataURL('image/png');
return imageData;
},
getBlob: function()
{
var imageData = this.getDataURL();
var b64 = imageData.replace('data:image/png;base64,','');
var binary = atob(b64);
var array = [];
for (var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type: 'image/png'});
},