Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

167
Visualizações
¿Cómo mover la posición interna de FileHandle sin leer datos?

Estoy tratando de leer un archivo binario byte por byte en Node usando fs.open y FileHandle . Usando FileHandle.read(buffer, offset, length, position) , puedo:

  1. Deje el argumento de position en blanco, en cuyo caso cada porción de datos leídos mueve la posición interna de FileHandle
  2. Proporcione un argumento de position , en cuyo caso la posición interna permanecerá sin cambios

Me gustaría leer un valor desde una posición específica en el medio del archivo (usando FileHandle.read con una posición) y, en función de ese valor, leer secuencialmente algunos otros datos desde otro punto del archivo (usando FileHandle.read con sin puesto).

La primera parte es fácil. Para la segunda parte, sé que puedo:

  1. Mantener una variable de posición personalizada y suministrarla a cada llamada de read
  2. Lea una cierta cantidad de datos del archivo solo para cambiar la posición interna

La primera solución es factible pero un poco complicada, ya que la estructura de esos datos es bastante complicada. La segunda solución no es realmente viable ya que los archivos se vuelven bastante grandes, y el objetivo de leer el archivo byte por byte era no leer grandes porciones de su contenido en la memoria.

También puedo construir mi propia abstracción sobre FileHandle , una que mantendría su propia posición interna y me permitiría modificarla, pero prefiero evitarlo si puedo.

¿Hay algún método que me permita omitir una cantidad arbitraria de bytes en un FileHandle o configurar manualmente su posición interna?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La biblioteca fs toma una estrategia de no intervención con la posición del archivo, dejando que libuv y el sistema operativo se encarguen de eso por completo. Por lo tanto, no hay una posición guardada en el objeto FileHandle.

Puede ver el código relevante aquí donde simplemente hace esto:

 position = bufferOrOptions.position || null;

y simplemente pasa esa variable de position directamente a través de los enlaces de código nativo:

 const bytesRead = (await binding.read(handle.fd, buffer, offset, length, position, kUsePromises)) || 0;

Por lo tanto, el módulo fs en sí mismo no realiza un seguimiento de la posición del archivo y, por lo tanto, no puede "configurarlo" en el módulo fs . Además de piratear las partes internas de nodejs, no conozco otra forma de "establecer" la posición del archivo que no sea su propia sugerencia de anular varios métodos para realizar un seguimiento de la posición del archivo "actual" y luego poder configurar ese archivo position al valor "actual" antes de que proceda cualquier llamada a la API que no haya pasado explícitamente en la posición del archivo.

Viniendo de C ++, donde esto era una parte tan integrada de la biblioteca de archivos std, esto siempre me ha parecido extraño en nodejs que no hay provisión para ello. Parece que quizás libuv ni siquiera tenga una idea de la posición del archivo si observa las operaciones de archivo disponibles aquí , así que quizás esta es la razón por la cual nodejs hace lo mismo.

De todos modos, lo siento, no pude ofrecer ninguna respuesta mágica y simple, pero espero que esto explique el estado de las cosas a este respecto y pueda decidir cuál es la mejor manera de proceder.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda