⑴ 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'});
},