Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

Determining the Number of Parts Needed to Download a File

Posted on August 30, 2024August 30, 2024 By nim No Comments on Determining the Number of Parts Needed to Download a File

When downloading a large file in chunks, you must determine how many chunks (or parts) are necessary. The partSize is the size of each chunk, and fileSize is the total size of the file.

Contents

Toggle
  • The Basic Idea
  • The Challenge: Rounding Up
  • Breaking Down the Formula: (fileSize + partSize - 1) / partSize
  • Why Does This Work?
  • Summary

The Basic Idea

If a file is exactly divisible by the part size, you can simply divide fileSize by partSize to get the number of parts. For example:

  • Example 1: If fileSize is 10 MB and partSize is 5 MB, the file can be divided into 2 parts (10 MB / 5 MB = 2 parts).

However, if the file size isn’t exactly divisible by the part size, you’ll have a leftover portion that still needs to be downloaded as a smaller final part.

  • Example 2: If fileSize is 12 MB and partSize is 5 MB, dividing 12 MB by 5 MB gives you 2.4, which means you need 2 full parts and a small extra part. You can’t have a fraction of a part, so you need to round up to 3 parts.

The Challenge: Rounding Up

In programming, dividing two integers like fileSize / partSize usually discards the remainder and rounds down to the nearest whole number. This is called integer division.

  • Example 3: 12 MB / 5 MB = 2 (but actually, you need 3 parts).

To account for the leftover part and effectively “round up” to the next whole number when there’s a remainder, you can use the formula:

Breaking Down the Formula: (fileSize + partSize - 1) / partSize

  1. Add partSize - 1:
    • By adding partSize - 1, you’re ensuring that any remainder after dividing fileSize by partSize will cause the division to round up instead of down.
    • Example 4: If fileSize = 12 MB and partSize = 5 MB:
      • partSize - 1 is 5 MB - 1 byte = 4,999,999 bytes.
      • Adding this to fileSize: 12 MB + 4,999,999 bytes = 16,999,999 bytes.
  2. Divide by partSize:
    • Now, when you divide by partSize, the result is effectively rounded up:
    • Example 5: 16,999,999 bytes / 5 MB = approximately 3 parts.

Why Does This Work?

  • Scenario 1: No Remainder (file size is a multiple of part size):
    • If fileSize = 10 MB and partSize = 5 MB:
      • fileSize + partSize - 1 = 10 MB + 5 MB - 1 byte = 14,999,999 bytes.
      • 14,999,999 bytes / 5 MB = 2 parts.
      • This gives the correct result because no rounding is needed.
  • Scenario 2: Remainder Exists (file size isn’t a multiple of part size):
    • If fileSize = 12 MB and partSize = 5 MB:
      • fileSize + partSize - 1 = 12 MB + 5 MB - 1 byte = 16,999,999 bytes.
      • 16,999,999 bytes / 5 MB = 3 parts.
      • The rounding up happens automatically, ensuring you account for the leftover portion.

Summary

The formula (fileSize + partSize - 1) / partSize ensures that the number of parts is correctly calculated, even when the file size isn’t an exact multiple of the part size. By adding partSize - 1 before dividing, you force the division to round up, ensuring that any remaining bytes are included in an additional part.

Coding

Post navigation

Previous Post: NextJS 14 – ReactJS – Type Script] Bài 2: Toán tử so sánh, câu điều kiện, và kiểu dữ liệu undefined, null
Next Post: [RedisInsight] Developer GUI for Redis, by Redis

More Related Articles

[Code] Beautiful code offline – On PC – On Laptop Coding
[Ddosify] How to test the application performance with Ddosify. Coding
[WordPress] Tăng dung lượng upload file lên wordpress. Coding
[Git] Look into Git Submodule Coding
[iframe/Grafana]Hướng dẫn nhúng iframe grafana đẹp xoá left menu Coding
Conventional Commits Coding

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Laravel] Laravel Helpful June 26, 2025
  • [VScode] Hướng dẫn điều chỉnh font cho terminal June 20, 2025
  • [WordPress] Hướng dấn gửi mail trên WordPress thông qua gmail. June 15, 2025
  • [Bitbucket] Git Clone/Pull/Push with Bitbucket through API Token. June 12, 2025
  • [Teamcity] How to transfer the value from pipeline A to pipeline B June 9, 2025

Archives

  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2025 NimTechnology.