Maison  >  Article  >  Java  >  Traitement de gros fichiers JSON en Java

Traitement de gros fichiers JSON en Java

Barbara Streisand
Barbara Streisandoriginal
2024-10-21 16:11:29847parcourir

Large JSON file processing in Java

Un traitement efficace des fichiers JSON est important dans les applications modernes. Si le fichier JSON est volumineux, nous devons le gérer correctement pour éviter les erreurs de mémoire insuffisante et une forte consommation de ressources.

GSON est l'une des meilleures bibliothèques disponibles en Java pour traiter les fichiers JSON.

  • Il fournit une instance thread-safe pour réutiliser le même objet pour traiter plusieurs requêtes.

  • Il ne s'attend à ce qu'aucune annotation soit disponible pour la sérialisation et la désérialisation, sauf cas particulier.

  • Il fournit les méthodes toJson() et fromJson() pour la sérialisation et la désérialisation.

  • Il fournit un support pour lire le contenu à l'aide de lecteurs de flux.

Vous trouverez ci-dessous l'extrait de code permettant de lire le fichier à l'aide de lecteurs de flux Java et de le convertir en objet Java. J'applique ma logique métier pour 100 enregistrements.

Assomption Le fichier JSON contient un tableau de données comme ci-dessous.

[
{
"identifiant": 1,
"firstName": "Emily",
"nom": "Johnson"
>
]

Code Java

private Optional<Boolean> readFile(String path) {
    try (InputStream inputStream = Files.newInputStream(Path.of(path));
         JsonReader reader = new JsonReader(new InputStreamReader(inputStream))) {
        Instant start = Instant.now();
        reader.beginArray();
        List<User> users = new ArrayList<>();
        while (reader.hasNext()) {
            users.add(gson.fromJson(reader, User.class));
            if (users.size() >= 100) {
                //Initiate your records processing
                //You can consider processing it async way handling failure scenarios properly
                users.clear();
            }
        }
        reader.endArray();
        LOGGER.info("Total time taken to process file:{}, Duration:{} (millis)", path, Duration.between(start, Instant.now()).toMillis());
    } catch (Exception e) {
        LOGGER.error("", e);
        return Optional.of(false);
    }
    return Optional.of(true);
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn