Anzeige

Brandbreite anderer Programme limitieren, möglich?


Stroke.

Grünschnabel
#1
Hallo!

Nach viel Suchen und wenig Erfolg schreibe ich einfach mal hier einen Beitrag.

Es geht um folgendes:
Ich habe einen laufenden Prozess (ein Programm welches Downloads und Uploads vornimmt) und möchte dessen Bandbreite limitieren.

Ich weiß, es gibt viele Anwendungen und ähnliches die diese Arbeit für einen erledigen, dennoch bin ich eigentlich eher daran interessiert das java-Programm für dieses Problem selber zu schreiben.

Vielen Dank für eure Zeit,
Stroke. :)

---------------------------------
Nachtrag

Hier habe ich versucht den outputstream abzufangen... und dann mit ihn zu arbeiten.
Mit welchem Objekt kann ich einen solchen outputstream auslesen?
Der Scanner unten kann ja lediglich inputstreams verwenden.
Java:
import java.util.Scanner;

public class LimitProcess{
   public static void main(String[] args){
       try{
           Process process = Runtime.getRuntime().exec("process.exe", null);
           Scanner scanner = new Scanner(process.getOutputStream());
       }
       catch (Exception e){
           System.out.println("Error");
           e.printStackTrace();
       }
   }
}
Dann bin ich auf eine ratelimiter methode gestoßen aber weiß nicht genau wie ich diese einbinden kann...
Java:
import com.google.common.util.concurrent.RateLimiter;
import java.io.IOException;
import java.io.OutputStream;

public final class ThrottledOutputStream extends OutputStream {
   private final OutputStream out;
   private final RateLimiter rateLimiter;

   public ThrottledOutputStream(OutputStream out, double bytesPerSecond) {
       this.out = out;
       this.rateLimiter = RateLimiter.create(bytesPerSecond);
   }

   public void setRate(double bytesPerSecond) {
       rateLimiter.setRate(bytesPerSecond);
   }

   @Override
   public void write(int b) throws IOException {
       rateLimiter.acquire();
       out.write(b);
   }

   @Override
   public void write(byte[] b) throws IOException {
       rateLimiter.acquire(b.length);
       out.write(b);
   }

   @Override
   public void write(byte[] b, int off, int len) throws IOException {
       rateLimiter.acquire(len);
       out.write(b, off, len);
   }

   @Override
   public void flush() throws IOException {
       out.flush();
   }

   @Override
   public void close() throws IOException {
       out.close();
   }
}
 
Zuletzt bearbeitet:
Anzeige
Anzeige