서버로 보내기 전에 바이너리 데이터에 대한 특정 작업을 수행하기 위해 파일을 읽으려고합니다.자바 스크립트 : Uint16Array (길이)가 잘못된 인수를 반환합니다.
특정 시점에서 FileReader.readAsArrayBuffer()에 의해 반환 된 데이터를 Uint16Array()로 변환하려고합니다. 그러나 이렇게하면 배열을 할당하는 코드가 실패합니다 : 'Error : invalid arguments'. 데이터가 전체 바이너리를 나타내는 16 진수 문자열이어야합니다.
이
내가 사용하고 코드입니다 :function HexToHexString(ByteBuffer)
{
//Similar constructs like: 'var Array = new Uint16Array(ByteBuffer);' also fail
var View = new DataView(ByteBuffer);
var Array = new Uint16Array((ByteBuffer.byteLength/2)); // <- this line fails
for(var i = 0; i < Array.length; i++)
{
Array[i] = View.getUint16(i*2);
}
return String.fromCharCode.apply(null, Array);
}
function OnReadFileCompletion(FileReadEvent)
{
if(FileReadEvent.target.readyState == FileReader.DONE)
{
// Debug code, will be replaced:
document.getElementById('byte_content').textContent = HexToHexString(FileReadEvent.target.result);
//FileReadEvent.target.result;
}
}
function ReadFile(File, ResultFunction)
{
var Reader = new FileReader();
Reader.onloadend = ResultFunction;
Reader.readAsArrayBuffer(File.slice(0, File.size - 1));
}
파일이 파일 객체가, ResultFunction는의 ByteBuffer는 '[객체 ArrayBuffer은]입니다 OnReadFileCompletion()입니다.
ArrayBuffer의 크기를 출력 할 때 파일 크기 (82kb)와 일치합니다. 파이어 폭스 32에 플러그인이 설치되어 있지 않습니다.
저는 자바 스크립트 프로그래머가 아니며, 내가 뭘 잘못하고 있는지 알 수 있습니까?
EDIT1가 :
1킬로바이트 텍스트 파일이 82킬로바이트 이진 파일하지 않는 동안 작업을 표시하여, 내가 읽은하기 위해 노력하고있어 파일의 크기에 할 일 무언가가 보인다.
Edit2가
나는 아마도 그것은 파일 형식 함께 할 수있는 뭔가가, 너무 빨리 말했다. 200kb의 이미지 파일은 작동하지만 82의 실행 파일은 작동하지 않습니다.
javascript가 실행 파일에이 방법으로 액세스 할 수 없도록하는 것으로 보입니다. 아무도 16 진수 형식의 데이터에 액세스 할 수있는 방법을 알지 못합니다.
아무런 변화가 없지만 여전히 오류를 반환합니다. – user513647
정확한 메시지를 붙여 넣을 수 있습니까? nvm - 당신이 게시물을 다시 읽었습니다. 이제 –
을 보았습니다. Uint16Array를 생성자로 전달하고 ArrayBuffer를 인스턴스화하는 것이 가능해야합니다. 시도해 보셨습니까? –